Excluding a top-level directory from a setuptools package

I'm trying to put a Python project into a tarball using setuptools. The problem is that setuptools doesn't appear to like the way that the source tree was originally setup (not by me, I must add). Everything that I actually want to distribute is in the top-level directory, rather than in a subdirectory like the setuptools docs talk about.

The tree has a directory, tests, that I don't want to have in the released package. However, using exclude_package_data doesn't seem to actually do any excluding, and I'd like to work out what I've done wrong.

My setup.py looks like this, in relevant part:

  exclude_package_data={'': ['tests']},

Asked by: Agata653 | Posted: 06-12-2021

Answer 1

I have wasted several hours on the same problem, trying to exclude a module, I finally found that I had to remove the *.egg-info and build directories, that somehow retained the idea that the module had to be included.

Answered by: Chester126 | Posted: 07-01-2022

Answer 2

We use the following convention to exclude 'tests' from packages.


We also use MANIFEST.in to better control what include_package_data=True does.

Answered by: Audrey473 | Posted: 07-01-2022

Answer 3

This is what I found in setuptools manual:

from setuptools import setup, find_packages
packages = find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),

In my case the following was enough to exclude top-level tests directory:

packages = find_packages(exclude=["tests.*", "tests"]),

Answered by: Dexter322 | Posted: 07-01-2022

Answer 4

I have the following in my setup.py...

      description='Example for stack overflow',
      author='David Michael Pennington',
      author_email='mike /|at|\ pennington.net',
      keywords='Stack Overflow Example',
      entry_points = "",
      include_package_data=True,  # Checks MANIFEST.in for explicit rules
      #                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

I had a doc/ directory that was getting massive due to the number of images I had in it; this meant that the size of my sdist was growing over 500kB. Originally I had this in my MANIFEST.in...

include LICENSE CHANGES README.rst requirements.txt
recursive-exclude * __pycache__
recursive-exclude * *.pyc
recursive-exclude * *.pyo
recursive-exclude * *.orig

The only thing I had to do to exclude my doc directory was this line at the bottom of MANIFEST.in...

prune doc*

Using prune doc* suddenly removed all my doc/ directory from the sdist tarball. So, it looks like you just need to use this in a MANIFEST.in file...

prune tests*

Answered by: Elian272 | Posted: 07-01-2022

Answer 5

Ug, setuptools makes this really tricky :(

I don't know if this is what you want, but one project I work on uses a combination of two things:

from setuptools import setup, find_packages
packages = find_packages(exclude=['tests']),
data_files = os.walk(path_to_files),

Answered by: Dominik782 | Posted: 07-01-2022

Answer 6

An additional solution that worked in my case. Apparently: packages=setuptools.find_packages(exclude=["tests.*", "tests"]),

didn't work, but:

packages=setuptools.find_packages(exclude=["*tests.*", "*tests"]),

adding the star character at the beginning of the word did the trick.

Answered by: Lenny382 | Posted: 07-01-2022

Answer 7

For similar purpose, my collegue wrote setuptools-dummy package: http://github.com/ella/setuptools-dummy/tree/master

Take a look at setuptools_dummy, modify excludes to your needs and it should work. If not, open an issue ;)

Answered by: First Name265 | Posted: 07-01-2022

Similar questions

python - setuptools not properly excluding tests

My package structure is package |-setup.py |-package | |-__init__.py | |-source.py |-test |-__init__.py |-test_source.py I've got the line packages=find_packages(exclude=['test']) in my call to setup() in my package's setup.py. If I python3 setup.py sdist bdist_wheel, then navigate in to dist/

setuptools - Accessing python egg's own metadata

I've produced a python egg using setuptools and would like to access it's metadata at runtime. I currently got working this: import pkg_resources dist = pkg_resources.get_distribution("my_project") print(dist.version) but this would probably work incorrectly if I had multiple versions of the same egg installed. And if I have both installed egg and development version, then running this cod...

setuptools - How to get the "python setup.py" submit information on freshmeat?

This can submit information about your software on pypi: python setup.py register But there is not a similar command for submitting information to freshmeat. How could I write a distutils.Command that would let me do the following? python setup.py freshmeat-submit

How do I set up Setuptools for Python 2.6 on Windows?

Is there any way to install Setuptools for Python 2.6 in Windows without having an exe installer? There isn't one built at the moment, and the maintainer of Setuptools has stated that it will probably be a while before he'll get to it. Does anyone know of a way to install it anyway?

python - Why does setuptools sometimes delete and then re-install the exact same egg?

I'm trying to install an egg on a computer where an identical egg already exists. Why does it remove the egg and then re-install it? I'm calling easy_install from a script with the options: ['-v', '-m', '-f', 'R:/OPTIONS/Stephen/python_eggs', 'mypkg==1.0_r2009_03_12'] While running the easy_install command this was observed: Searching for mypkg==1.0-r2009-03-12 Best match: ...

setuptools - Explain Python entry points?

I've read the documentation on egg entry points in Pylons and on the Peak pages, and I still don't really understand. Could someone explain them to me?

python - How can I make setuptools ignore subversion inventory?

When packaging a Python package with a setup.py that uses the setuptools: from setuptools import setup ... the source distribution created by: python setup.py sdist not only includes, as usual, the files specified in MANIFEST.in, but it also, gratuitously, includes all of the files that Subversion lists as being version controlled beneath the package direc...

python - What if setuptools isn't installed?

I'm just learning the art of writing a setup.py file for my project. I see there's lots of talk about setuptools, which is supposed to be superior to distutils. There's one thing though that I fail to understand, and I didn't see it addressed in any tutorial I've read about this: What if setuptools isn't installed? I understand it's not part of the standard library, so how can you assume the perso...

Python setuptools import error (Using NetBeans)

I tried to find a question that would answer to this question but wasn't succesful, so I made a new question. I'm trying to compile my old Python Tic Tac Toe game in NetBeans, but I get the error message ImportError: No module named setuptools In my actual code I haven't imported a module named setuptools. As much as I understand the compiler generates a setup.py file and tries to ...

setuptools - PIP install a Python Package without a setup.py file?

I'm trying to figure out how I can install a python package that doesn't have a setup.py file with pip. (package in question is http://code.google.com/p/django-google-analytics/) Normally I would just checkout the code from the repo and symlink into my site-packages,...

python - Is there a method to find out if a package is to be installed with distutils instead of setuptools?

I can look inside setup.py I suppose to see if it's a distutils package. But in the process of familiarizing myself with python package management I have noticed that there seems to be more than one way to do it. So: How can I check an unzipped packages directory or setup.py to see how to build it? EDIT: When I say 'build' I mean is it going to use distutils or setuptools, or distribute. I am using build...

Still can't find your answer? Check out these communities...

PySlackers | Full Stack Python | NHS Python | Pythonist Cafe | Hacker Earth | Discord Python