[Distutils] First attempt: close but no data files!

Kaelin Colclasure kaelin at acm.org
Fri Oct 23 06:58:24 CEST 2009


On Oct 22, 2009, at 7:37 PM, P.J. Eby wrote:

> At 06:26 PM 10/22/2009 -0700, Kaelin Colclasure wrote:
>
>> On Oct 22, 2009, at 6:14 PM, P.J. Eby wrote:
>>
>>> At 05:47 PM 10/22/2009 -0700, Kaelin Colclasure wrote:
>>>> Greetings,
>>>>
>>>> I am attempting my first Python contribution and have run into a
>>>> speed
>>>> bump getting a working setup.py using setuptools. Specifically, I
>>>> cannot coax it to install my package data files into the site-  
>>>> packages
>>>> directory. Here is a link to my project where my setup.py is
>>>> available
>>>> for browsing:
>>>>
>>>> <http://bitbucket.org/kaelin/cuttlefish/>
>>>
>>> There's no setup.py there.
>>
>>
>> Oops, forgot to `hg push`... It's there now. :-)
>
> Your "package data" isn't being included because you don't have any  
> packages, only a module.
>
> Move your cuttlefish.py to cuttlefish/__init__.py, and put  
> the .plist file in the same directory with it, and switch from  
> py_modules to packages in your setup() arguments.  That will make it  
> get included with your installs and eggs.
>
> Finally, you may want to drop use of __file__ and use the  
> pkg_resources API to access your data files instead, so that your  
> library will work when it's installed as a zipfile:
>
> http://peak.telecommunity.com/DevCenter/PkgResources#basic-resource-access
>
> For example, rather than using __file__ to find the .plist file, you  
> might use:
>
>   contents = resource_string(__name__, 'cuttlefish-config.plist')
>
> to load the contents of the file as a string.
>
> (This step is optional; if you use __file__ in your code, setuptools  
> will mark your project's eggs as requiring unzipping, and they will  
> be installed unzipped.  So, you don't *have to* do it, the __file__  
> use will still work.)
>

Ah, so… Thanks for the guidance!

Restructuring as a package did indeed get things working as expected.  
It's somewhat unfortunate that this is a requirement, as it made for a  
lot of noise in my Mercurial repository and now most of my code is in  
a module with the unhelpful name __init__.py… But this too shall  
pass. :-)

Thanks again!

-- Kaelin




More information about the Distutils-SIG mailing list