distutils and data files

S

Sam Peterson

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.
 
R

Robert Bossy

Sam said:
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?

The following thread addresses this issue:
http://www.gossamer-threads.com/lists/python/python/163159

Carl Banks' solution seems to overcome the problem: his trick is to
generate an additional configuration module with the relevant
informations from the distutil data structure. However it is quite an
old thread (2003) and I don't know if there has been progress made since
then, maybe the distutils module now incorporates a similar mechanism.

Hope it helps,
RB
 
S

Sam Peterson

This seems to be a classic distutils question: how a python module
can access to data files *after* being installed?

Man, I was afraid of that. Python is an awesome language, but this is
yet another instance of seeing something in the standard library
sucking.
The following thread addresses this issue:
http://www.gossamer-threads.com/lists/python/python/163159

Carl Banks' solution seems to overcome the problem: his trick is to
generate an additional configuration module with the relevant
informations from the distutil data structure. However it is quite an
old thread (2003) and I don't know if there has been progress made
since then, maybe the distutils module now incorporates a similar
mechanism.

Not if the documentation for 2.5's got anything to say about it. If
it does, it's well hidden.

I think I'll kill the idea of using distutils for my program. It
seems like distutils was primarily designed for modules and
extensions.
 
D

Diez B. Roggisch

Not if the documentation for 2.5's got anything to say about it. If
it does, it's well hidden.

I think I'll kill the idea of using distutils for my program. It
seems like distutils was primarily designed for modules and
extensions.

Start using setuptools and pkg_resources. Then you can use pkg_resources
to locate a module directory, and use that to fetch data contained in there.

Diez
 
G

Gabriel Genellina

En Fri, 22 Feb 2008 05:28:22 -0200, Sam Peterson
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top