Python Packaging: Data files are put properly in tar.gz file but are not installed to virtual environment Python Packaging: Data files are put properly in tar.gz file but are not installed to virtual environment python python

Python Packaging: Data files are put properly in tar.gz file but are not installed to virtual environment


Found a solution that worked for me here.

Using setuptools==2.0.2 I did:

setuptools.setup(    ...    packages=setuptools.find_packages(),    include_package_data=True,  # use MANIFEST.in during install    ...)


I personally dislike the way setuptools mixes code and data both conceptually and implementation-wise. I think that it's that implementation that is tripping you up here. For setuptools to find and use package_data it needs for the data to reside inside of a python package. A python package can be a directory but there needs to be a __init__.py file in the directory. So it looks like you need the following (empty is fine) files:

./package_fiddler/data/__init__.py./package_fiddler/data/stylesheets/__init__.py


The easiest way to include package data in "setup.py" is like so:

package_data = {'<package name>': ['<path to data file within package dir>']}

So in your example:

package_data = {'package_fiddler': ['data/*', 'data/stylesheets/*']}

package_data is a dictionary where the keys are the names of the packages included in the installer. The values under these keys should be lists of specific file paths or globs/wildcards within the package directory.

You also need to include the flag:

zip_safe=False

in setup(...) if you want to be able to resolve file system paths to your data. Otherwise you can use pkg_resources to do this: http://peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resources

You definitely don't need an __init__.py file in the "data" directory - this directory is not a module and is not meant to be imported.