views:

296

answers:

1

This question assumes that the python package I want to install is a django app that includes templates and media files. But the question is valid for any python package that does not only contain .py files.

I'm using buildout to create a re-buildable environment in which I'm developing a django project. My buildout.cfg looks like that:

[buildout]
parts = python
eggs =
  normal-python-package
  python-package-with-data-files
find-files = 
  http://domain-to-python-package-with-data-files

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}

(and some django related stuff). The python-package-with-data-files is available through a link on the page http://domain-to-python-package-with-data-files.

The eggs normal-python-package and python-package-with-data-files are installed successfully in the eggs/ directory. Because python-package-with-data-files has set zip_safe to False in its setup.py file it is available unzipped in eggs/.

Only the non .py files of python-package-with-data-files are not available in the unzipped egg in eggs/ (they are included in the .tar.gz package available at http://domain-to-python-package-with-data-files).

How do I get these data files to be included in the egg? Do I need to change the setup.py file of the package? Or is it buildout related?

The things I found out are the following:

If I make a python setup.py sdist in python-package-with-data-files root directory, all data files are included in the created .tar.gz file. But if I make a python setup.py bdist it results in a build without including the data files.

This makes me think that the problem is not buildout specific. But maybe there is a way to tell buildout not to make a bdist but a sdist to create the egg and install the package into the project.

What shall I do? I am the maintainer of python-package-with-data-files, so I can change setup.py if necessary.

+2  A: 

It sounds like you need to make use of the package_data keyword argument in your setup.py file, so distutils knows those files should be installed with your package.

Carl Meyer
I already tried this out but it was still not adding the data files. After you mentioned it here I tried *again* and now it works. I found out that it's important to use paths that are relative to the package - and not relative to the project root. *Thank you!* It works now.
Gregor Müllegger
Yeah, that's a bit of a gotcha with package_data...
Carl Meyer