[Distutils] "setuptools" package preview

Phillip J. Eby pje at telecommunity.com
Sun Mar 7 17:38:21 EST 2004

I'm working on a set of distutils enhancements called "setuptools".  The 
"setuptools" extend the base Distribution class with the ability to do:

* feature management -- you can define subsets of a distribution as 
"features" that can be enabled or disabled via '--with-X' and '--without-X' 
options to 'setup.py'.  Features can (recursively) depend on other 
features, and be included or excluded by default.  (Their inclusion or 
exclusion affects all commands, as the relevant 
packages/modules/data/scripts/whatever are added or removed just after 
command line arguments are parsed.)

* package data installation -- you can specify filenames or globs to be 
searched for in package source directories, for installation alongside the 
package .py files.  All without munging the 'install_data' command or 
manually copying files, and the data files are correctly included in the 
'get_outputs()' manifest for all the distutils features that depend on 
knowing what files were copied.

* 'test' command -- optionally run a user-specified or 'setup.py'-specified 
test suite via the 'unittest' module.

* Packages and modules can be simultaneously specified as arguments to 
'setuptools.setup()', unlike the standard distutils 'setup()'.

The above features are all fully implemented and documented via docstrings, 
and the majority of them are covered by an extensive unit test 
suite.  "setuptools" uses itself for its own 'setup.py', in order to enable 
the 'test' command to run its built-in unit tests.

The purpose of "setuptools" is to collect commonly useful distutils 
enhancements for large or complex packages like Zope X3 and PEAK.  It's 
also intended to be the starting point for developing simple installer-side 
dependency support, as described/proposed at:


Finally, I also intend to add some type of general-purpose documentation 
build and install facilities, to replace the rather hacky documentation 
support in my current setup scripts.

At this point, the package isn't quite ready for general release, as it 
doesn't include documentation beyond docstrings, and of course the 
dependency and documentation features aren't written yet.  But I believe it 
is ready for feedback from interested parties such as PyCon sprinters, and 
people who are undertaking complex distutils projects.  I'm interested in 
your comments, especially as they may relate to the viability of eventually 
merging setuptools into a "Distutils 2.0" (or maybe "1.5").  Setuptools is 
specifically laid out to match the package layout and naming conventions of 
the distutils in order to facilitate such porting.

You can currently find the setuptools CVS at:


although there has been some discussion about moving it to the Zope X3 CVS 
in the near future to facilitate the coming sprint, and other contributions.

Please follow up with discussion to the distutils-sig mailing list.  Thanks.

More information about the Distutils-SIG mailing list