setuptools

Tests

Place the tests in the test directory. Per default setuptools adds the test directory to the source distribution sdist. This can be disabled in the MANIFEST.in.

Commands dependencies

Graph showing the dependencies between the common setuptools commands:

//


digraph setuptools {
    node [fontsize=10]
    edge [fontsize=8]
    "install" -> "bdist_egg" [label="install"]
    "install" -> "install_lib" [label="bdist,bdist_dumb,bdist_wheel"]
    "build" -> "build_py"
    "build_py" -> "egg_info"
    "bdist_egg" -> "egg_info"
    "bdist_egg" -> "install_lib"
    "install_egg_info" -> "egg_info"
    "install_lib" -> "build_py" [label="bdist_egg,install,install_lib"]
    "install_lib" -> "install_egg_info" [label="bdist,bdist_dumb,bdist_wheel"]
    "install_egg_info" -> "install_scripts"
    "bdist_dumb" -> "build"
    "bdist_dumb" -> "install"
    "bdist_wheel" -> "build"
    "bdist_wheel" -> "install"
    "bdist" -> "bdist_dumb"
    "sdist" -> "egg_info"
    "sdist" -> "check"
    "develop" -> "build_ext"
    "develop" -> "egg_info"
    "test" -> "egg_info"
    "test" -> "build_ext"
}


// EOF

Extend install command

Warning

This is a work in progress that needs to be improved on.

This shows how to add a subcommand to the install command. This also shows how the subcommand can add to the list of files to be installed (packaged in a bdist).

class install_something(setuptools.Command):
    user_options = [
        ('install-dir=', 'd', "directory to install to"),
    ]
    def initialize_options(self):
        self.install_dir = None
    def finalize_options(self):
        self.outputs = []
        self.set_undefined_options(
            'install',
            ('install_lib', 'install_dir'),
        )
    def run(self):
        self.outputs.append('package/something.bin')
        self.mkpath(self.install_dir + 'package')
        self.copy_file(
            'src/package/something.bin',
            self.install_dir + 'package/something.bin',
        )
    def get_outputs(self):
        return self.outputs


class install(distutils.command.install.install):
    _sub_command = (
        'install_something',
        None,
    )
    _sub_commands = distutils.command.install.install.sub_commands
    sub_commands = [_sub_command] + _sub_commands