Python package data¶
Further down is a minimal example showing how to achieve both:
packaging a data file
file.src
insdist
only;and packaging another data file
file.bin
inbdist
only;additionally it shows how
file.all
is packaged in both distribution packages andfile.not
in none of them.
The gist of it is:
first and foremost, always thoroughly clean up the working directory between two packaging attempts while tweaking these packaging options (in particular empty the
src/Thing.egg-info
directory containing theSOURCES.txt
file as well as thebuild
, anddist
directories) or the results will be inconsistent;set the
include_package_data
option toTrue
;file.all
and files that belong in bothsdist
andbdist
are specified inMANIFEST.in
;file.bin
and files that belong inbdist
only are specified inpackage_data
;file.src
and files that belong insdist
only are specified in bothMANIFEST.in
andexclude_package_data
;file.not
and files that do not belong in any distribution package are not specified anywhere.
The directory structure for our example:
.
├ MANIFEST.in
├ setup.py
└ src
└ thing
├ __init__.py
└ data
├ file.all
├ file.bin
├ file.not
└ file.src
In MANIFEST.in
:
recursive-include src/thing *.all
recursive-include src/thing *.src
In setup.py
:
#!/usr/bin/env python3
import setuptools
setuptools.setup(
exclude_package_data={'thing': ['data/*.src']},
include_package_data=True,
package_data={'thing': ['data/*.bin']},
#
name='Thing',
version='1.0.0',
#
package_dir={'': 'src'},
packages=setuptools.find_packages(where='src'),
)
This has been tested with:
Python 3.6.7
setuptools 39.0.1
wheel 0.33.1