Excluding a top-level directory from a setuptools package

womble picture womble · Mar 4, 2009 · Viewed 24.8k times · Source

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:

setup(
  name="project",
  packages=[''],
  include_package_data=True,
  exclude_package_data={'': ['tests']},
  test_suite='nose.collector',
)

Answer

flexiondotorg picture flexiondotorg · Mar 19, 2012

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

setup(
   name="project",
   packages=find_packages(exclude=("tests",)),
   include_package_data=True, 
   test_suite='nose.collector',
)

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