Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python distutils does not include data_files

I am new to distutils.. I am trying to include few data files along with the package.. here is my code..

from distutils.core import setup

setup(name='Scrapper',
      version='1.0',
      description='Scrapper',      
      packages=['app', 'db', 'model', 'util'],
      data_files=[('app', ['app/scrapper.db'])]      
     )

The zip file created after executing python setup.py sdist does not include the scrapper.db file. I have scrapper.db file in the app directory..

thanks for the help.

like image 775
StackUnderflow Avatar asked Jun 08 '10 02:06

StackUnderflow


People also ask

How do you put non Python files on a wheel?

In order to include your non-Python files into said package, you'll need to supply include_package_data=True to the setup() function.

How do you include data in a python package?

Place the files that you want to include in the package directory (in our case, the data has to reside in the roman/ directory). Add the field include_package_data=True in setup.py. Add the field package_data={'': [... patterns for files you want to include, relative to package dir...]} in setup.py .

What is package_data in setup py?

package_data. By default, include_package_data considers all non .py files found inside the package directory ( src/mypkg in this case) as data files, and includes those that satisfy (at least) one of the above two conditions into the source distribution, and consequently in the installation of your package.

What should be in setup py?

The setup.py file may be the most significant file that should be placed at the root of the Python project directory. It primarily serves two purposes: It includes choices and metadata about the program, such as the package name, version, author, license, minimal dependencies, entry points, data files, and so on.


2 Answers

You probably need to add a MANIFEST.in file containing "include app/scrapper.db".

It's a bug in distutils that makes this necessary: anything in data_files or package_data should be included in the generated MANIFEST automatically. But in Python 2.6 and earlier, it is not, so you have to include it in MANIFEST.in.

The bug is fixed in Python 2.7.

like image 128
Carl Meyer Avatar answered Oct 21 '22 07:10

Carl Meyer


Try removing MANIFEST, that way distutils will be forced to regenerate it.

Note: I've been using python 3.x, so I don't know if this works with 2.x or not.

like image 33
Matthew Avatar answered Oct 21 '22 07:10

Matthew