Using zc.buildout to run setup scripts
======================================

zc buildout has a convenience command for running setup scripts.  Why?
There are two reasons.  If a setup script doesn't import setuptools,
you can't use any setuptools-provided commands, like bdist_egg.  When
buildout runs a setup script, it arranges to import setuptools before
running the script so setuptools-provided commands are available.

If you use a squeaky-clean Python to do your development, the setup
script that would import setuptools because setuptools isn't in the
path.  Because buildout requires setuptools and knows where it has
installed a setuptools egg, it adds the setuptools egg to the Python
path before running the script.  To run a setup script, use the
buildout setup command, passing the name of a script or a directory
containing a setup script and arguments to the script.  Let's look at
an example:

    >>> mkdir('test')
    >>> cd('test')
    >>> write('setup.py',
    ... '''
    ... from distutils.core import setup
    ... setup(name='sample')
    ... ''')

We've created a super simple (stupid) setup script.  Note that it
doesn't import setuptools.  Let's try running it to create an egg.
We'll use the buildout script from our sample buildout:

    >>> print_(system(buildout+' setup'), end='')
    ... # doctest: +NORMALIZE_WHITESPACE
    Creating directory '/sample-buildout/test/eggs'.
    Error: The setup command requires the path to a setup script or
    directory containing a setup script, and its arguments.

Oops, we forgot to give the name of the setup script:

    >>> print_(system(buildout+' setup setup.py bdist_egg'))
    ... # doctest: +ELLIPSIS
    Running setup script 'setup.py'.
    ...

    >>> ls('dist')
    -  sample-0.0.0-py2.5.egg

Note that we can specify a directory name.  This is often shorter and
preferred by the lazy :)

    >>> print_(system(buildout+' setup . bdist_egg')) # doctest: +ELLIPSIS
    Running setup script './setup.py'.
    ...
