user144153
user144153

Reputation: 858

Including data files with setup.py

I'm having trouble including data files in my setup.py script. My package is setup as follows:

my_package/
    setup.py
    MANIFEST.in

    my_package/
        __init__.py
        access_data.py

        data_files/
            my_data_file.csv

I want to include the my_data_file.csv file when installing so that it can be read by access_data.py. To do so I used the package_data keyword in setuptools:

setup(...,
      packages=['my_package'],
      package_data={'my_package': ['./my_package/data_files/my_data_file.csv']},
      include_package_data=True
      )

I also included the file in MANIFEST.in:

recursive-include my_package/data_files *

setup.py seems to run fine and doesn't throw any errors. However, when I import the package I get a file not found error because my_data_file.csv is missing. I have tried referencing other stack overflow questions (particularly this one) but can't figure out what I'm doing wrong. How can I get setup.py to include the necessary data files?

Upvotes: 10

Views: 9762

Answers (1)

anthony sottile
anthony sottile

Reputation: 69844

If it is listed in setup.py's package_data (correctly) you shouldn't need to include it in MANIFEST.in (as it will be included automatically)

In your case, the error is with your package_data line, the paths are relative to the namespace's root

In your case it should be:

package_data={'my_package': ['data_files/my_data_file.csv']},

Also note that the key in package data is the dotted module path (it's not super relevant for this toy case however).

Upvotes: 13

Related Questions