Package: disthelper
IntroductionWhat it doesInstallCreate a commandMy command disappeared, what do I do?Other make like toolsChangelogIntroductiondisthelper is a command line tool that helps you manage a Python distribution.  You may want to create Python scripts to automate common maintenance tasks for your project.  But where do you put them?  How about the standardsetup.py framework?  You can think of setup.py as a “make” tool for Python, although it’s more like howIan Bicking describes itand less like anactual make toolwith targets and dependencies.  For example, if you wrote a script to build your project docs and another to upload them, you could run these commands from your setup.py file:python setup.py build_docs upload_docsWhat it doesdisthelper just automates the use ofdistutilsso you don’t have to think about how tocreate a custom setup.py command.  It sets up the module / submodule structure, edits your setup.cfg, and adds new command modules as you request them.  disthelper doesn’t do anything you couldn’t do by hand.InstallYou caneasy_installit:easy_install disthelperOr grab thesourceCreate a commanddisthelper is implemented as aPasteextension.  Let’s say you want to create thisbuild_docscommand I mentioned.  cd into your project directory and type:$ paster distcmd build_docs
| Selected and implied templates:
|   disthelper#distcmd  A disthelper-based package for setup.py commands
|
| ** creating ./setup.py (you'll probably need to edit this)
| Variables:
|   command:       build_docs
|   distcmds_mod:  distcmds
|   package:       foo
| Creating template distcmd
|   Recursing into +package+
|     Creating ./foo/
|     Recursing into +distcmds_mod+
|       Creating ./foo/distcmds/
|       Copying +command+.py_tmpl to ./foo/distcmds/build_docs.py
|       Copying __init__.py to ./foo/distcmds/__init__.py
|     Copying __init__.py to ./foo/__init__.py
| patching ./setup.cfg ...
|
| ./foo/distcmds/build_docs.py
| ...is ready to edit
| run as:
|     python setup.py build_docs
|If you don’t already have a Python package it will prompt you for its name.  Assuming you named your packagefoo, you should see the following layout:$ tree
| .
| |-- foo
| |   |-- __init__.py
| |   `-- distcmds
| |       |-- __init__.py
| |       `-- build_docs.py
| |-- setup.cfg
| `-- setup.py
|
| 2 directories, 5 filesYour command is ready to run:$ python setup.py build_docs --help
| Global options:
|   --verbose (-v)  run verbosely (default)
|   --quiet (-q)    run quietly (turns verbosity off)
|   --dry-run (-n)  don't actually do anything
|   --help (-h)     show detailed help message
|
| Options for 'build_docs' command:
|   --long-option (-l)        <help>
|   --other-long-option (-o)  <help>
|
| usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
|    or: setup.py --help [cmd1 cmd2 ...]
|    or: setup.py --help-commands
|    or: setup.py cmd --help
|However, it doesn’t do anything useful yet so get to it!My command disappeared, what do I do?Unfortunately, distutils will completely ignore any ImportError in your command so one day your command might simply disappear.  To check that your command is set up correctly, run:$ paster distcmd build_docs --check
| Selected and implied templates:
|   disthelper#distcmd  A disthelper-based package for setup.py commands
|
| Variables:
|   command:       build_docs
|   distcmds_mod:  distcmds
|   package:       foo
| attempting to import foo.distcmds.build_docs
| OK
| checking vars in ./setup.cfg
|
| build_docs OKOther make like toolsdisthelper isn’t designed for complex builds, dependency management, etc, it just helps you create maintenance scripts.  You may want to check out…VellumVellum is a simple build tool like make but written in Python using a simple yet flexible YAML based format.SCONSA software construction toolzc.buildoutSystem for managing development buildoutsChangelog0.9.2fixed another bug in generating setup.py filesadded shelldoc support for functional tests (README examples)0.9.1fixed handling of setup.py file when one doesn’t already exist0.9first release, basic paster command working