views:

297

answers:

1

What's the magic "python setup.py some_incantation_here" command to upload a package to PyPI, in a form that can be downloaded to get the original package in its original form?

I have a package with some source and a few image files (as package_data). If I do "setup.py sdist register upload", the .tar.gz has the image files excluded. If I do "setup.py bdist_egg register upload", the egg contains the images but excludes the setup.py file. I want to be able to get a file uploaded that is just the entirety of my project -- aka "setup.py the_whole_freaking_thing register upload".

Perhaps the best way to do this is to manually tar.gz my project directory and upload it using the PyPI web interface?

Caveat: I'm trying to avoid having to store a simple project I just created in my SVN repo as well as on PyPI -- it seems like a waste of work to keep track of its history and files in two places.

Thanks in advance.

+2  A: 

When you perform an "sdist" command, then what controls the list of included files is your "MANIFEST.in" file sitting next to "setup.py", not whatever you have listed in "package_data". This has something to do with the schizophrenic nature of the Python packaging solutions today; "sdist" is powered by the distutils in the standard library, while "bdist_egg" is controlled by the setuptools module.

To solve the problem, try creating a MANIFEST.in next to your setup.py file, and give it contents like this:

include *.jpg

Of course, I'm imaging that your "image files" are actual pictures rather than disk images or ISO images or something; you might have to adjust the above line if I've guessed wrong! But check out the Specifying which files to distribute section of the distutils docs, and see whether you can't get those files appearing in your .tar.gz source distribution! Good luck.

Brandon Craig Rhodes
Perfect! "include nosenotify/*.png" was the format that I needed, as my files were in a subdirectory -- this format ensured that the .tar.gz nosenotify/ directory contained its .png files.
Michael Gundlach
PS Brandon, ironically after reading your answer I went to your blog and saw the post from one day before my question, saying you were so fed up with setup.py that you were making pyron. :)
Michael Gundlach