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
├── __init__.py
├── 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(
package_data={'thing': ['data/*.bin']},
exclude_package_data={'thing': ['data/*.src']},
include_package_data=True,
#
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