distutils and data files

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Feb 25 20:15:16 EST 2008


En Fri, 22 Feb 2008 05:28:22 -0200, Sam Peterson  
<skpeterson at nospam.please.ucdavis.edu> escribió:
> Robert Bossy <Robert.Bossy at jouy.inra.fr> on Wed, 20 Feb 2008 09:29:12
> +0100 didst step forth and proclaim thus:
>
>> Sam Peterson wrote:
>>> I've been googling for a while now and cannot find a good way to deal
>>> with this.
>>>
>>> I have a slightly messy python program I wrote that I've historically
>>> just run from the extracted source folder.  I have pictures and sound
>>> files in this folder that this program uses.  I've always just used
>>> the relative path names of these files in my program.
>>>
>>> Lately, I had the idea of cleaning up my program and packaging it with
>>> distutils, but I've been stuck on a good way to deal with these
>>> resource files.  The package_data keyword seems to be the way to go,
>>> but how can I locate and open my files once they've been moved?  In
>>> other words, what should I do about changing the relative path names?
>>> I need something that could work from both the extracted source
>>> folder, AND when the program gets installed via the python setup.py
>>> install command.
>>>
>> This seems to be a classic distutils  question:  how a python module
>> can access to data files *after* being installed?
>
>
> I think I'll kill the idea of using distutils for my program.  It
> seems like distutils was primarily designed for modules and
> extensions.

And packages. The package_data directive specifies data subdirectories  
that will be installed under the package directory; you can use a relative  
path starting at the package dir. (the thread above is about the  
install-data command-line option, but package_data isn't affected by that).

That is, if you have:

pkg/
	__init__.py
	images/
		foo.jpg
	sounds/
		bar.snd

At the top of __init__.py, you can say:

pkg_path = os.path.dirname(__file__)
images_path = os.path.join(pkg_path, "images")
sounds_path = os.path.join(pkg_path, "sounds")

It doesn't matter *where* pkg is actually installed, you can always reach  
its subdirectories.

-- 
Gabriel Genellina




More information about the Python-list mailing list