[Distutils] Multi-distribution distributions

Thomas Heller thomas.heller@ion-tof.com
Tue Jan 9 10:59:01 2001

Andrew Kuchling wrote:
> On Thu, Jan 04, 2001 at 11:49:06PM -0800, Paul Prescod wrote:
> >I could have a special case for NumPy and a special case for ZODB and a
> >special case for ... But there are around 600 extensions on the Vaults
> >of Parnassus and about 1800 Perl extensions on CPAN. If I'm going to
> The unified ZODB distribution is really several extensions in one:
> ExtensionClasses, for example, are potentially useful in their own
> right without the rest of ZODB.  But I don't want to make people
> download seven different packages, so they're wrapped up in a single
> distribution.  The true solution would be a tool like Debian's apt-get
> to automatically download the dependencies for a package, but that's a
> long way away.  If you're working on a Python package manager for
> ActiveState and want to package the ZODB, then all the components can
> just be packaged separately.

I have looked at the ZODB toplevel setup script, and it seems wrong to me.
The behaviour you get is very confusing:
Try running 'python setup.py --help', the --help option will be 'sent'
to every single (sub)setup script, and you will get several screens of

'python setup.py bdist_dumb' however, does at least something sensible:
it builds xxx.zip archives for every subpackage included in ZODB.

Wouldn't it be better to take an approach like this:

# create a magic dsitribution instance
toplevel_dist = MagicDistribution()
# collect all subpackages
for package_dir in packages:
    dist = run_setup('setup.py', stop_after='init')
    toplevel_dist.extend(<some magic code which combines
      all the properties from 'dist')
# run the top-level distro

Now, 'python setup.py --help' would print the help only once,
and 'python setup.py bdist_dumb' would build a single archive
containing _all_ subpackages.

There are (currently) some problems with this approach,
but maybe they can be sorted out...

(Note that I used the term 'package' above while
'distutils unit' would be the correct term nowadays)