setuptools troubles -- excluding packages, including data files
I was trying everything and nothing seemed to work, until I deleted the build
directory (after seeing another answer mentioning *.egg-info/
directory) and it finally worked. python setup.py clean --all
should also do the job.
You should create a new file called MANIFEST.in
in the root level of your package, then follow these instructions:
To control which files end up in your tar file, create a new file called
MANIFEST.in
in the root level of your package. For example, you can exclude whole directories from your distribution, usingrecursive-exclude
in theMANIFEST.in
file. In your case, you need yourMANIFEST.in
file to contain:recursive-exclude tests *
It's not common to include README and other files in the site-packages directory, but if you really want to, then go inside
package1
and create symbolic links to the files you want to include:cd package1 ln -s ../LICENSE ln -s ../README.md ln -s ../RELEASE
Then change the following line in your setup.py:
package_data = { '': ['LICENSE', 'README.md', 'RELEASE']
to:
package_data = { 'package1': ['LICENSE', 'README.md', 'RELEASE']
find_packages
uses fnmatchcase
for its exclude filtering. You can test if your exclusion pattern matches a package name as follows:
>>> from fnmatch import fnmatchcase
>>> fnmatchcase('my.package.name.tests', 'tests')
False
Assuming all the tests in your project live in package names ending in tests
or subpackages of those packages, the following should suffice to exclude all the test code:
setup(
name='package1',
version='1.1',
packages=find_packages(exclude=['tests', '*.tests', '*.tests.*']),
)
To also exclude the tests
folder from source distributions, add the following to MANIFEST.in:
recursive-exclude tests *