Gabriel Genellina
2/26/2008 1:15:00 AM
En Fri, 22 Feb 2008 05:28:22 -0200, Sam Peterson
<skpeterson@nospam.please.ucdavis.edu> escribió:
> Robert Bossy <Robert.Bossy@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