Posts for the month of September 2007
Adding support for a workingenv sandbox to setuptools/distutils
It seems that all I blog about is workingenv.
This time it's a snippet of code that adds a "sandbox" command to distutils, which automatically creates a workingenv from the setuptools extras_require, install_requires and dependency_links options listed in your setup() call. It only supports *nix systems for now, but could easily be extended to support Windows.
Here's the code:
import os from setuptools import setup, find_packages from distutils.cmd import Command class sandbox(Command): description = 'Create a development sandbox using workingenv' user_options = [ ('path=', None, 'workingenv path'), ('extras', None, 'also include "extras" requirements'), ] def initialize_options(self): self.path = 'wenv' self.extras = False def finalize_options(self): pass def run(self): requires = open('requirements.txt', 'w') try: requirements = self.distribution.dependency_links + \ self.distribution.install_requires if self.extras: extras = self.distribution.extras_require or {} requirements += extras.values() requires.write('\n'.join(requirements)) finally: requires.close() cwd = os.getcwd() import workingenv workingenv.main(['--always-unzip', '--requirements=requirements.txt', '--site-packages', '--verbose', self.path]) os.chdir(cwd) os.symlink(self.path + '/bin/activate', 'sandbox') print print 'XXX: Use ". sandbox" to activate the development sandbox' setup( name='MyCoolPackage', version='0.0.0.1', packages=find_packages(), # Add the sandbox command cmdclass={'sandbox': sandbox}, # Search some extra locations for dependencies dependency_links=[ 'http://svn.edgewall.org/repos/genshi/trunk#egg=Genshi-dev', 'http://trac.pocoo.org/repos/werkzeug/trunk#egg=Werkzeug-dev', 'http://svn.sqlalchemy.org/sqlalchemy/trunk#egg=SQLAlchemy-dev', ], install_requires=[ 'setuptools >= 0.6b1', 'Genshi >= 0.5.dev-r698,==dev', 'Werkzeug >= 0.1.dev-r3831,==dev', 'SQLAlchemy >= 0.4.0.dev-r3203,==dev', 'AuthKit >= 0.3.0pre5', ], )
And here's an example of how to use it:
$ python setup.py sandbox --help Common commands: (see '--help-commands' for more) ... Options for 'sandbox' command: --path workingenv path --extras also include "extras" requirements ... $ python setup.py sandbox --path=mysandbox --extras running sandbox Reading requirement requirements.txt Making working environment in /home/athomas/p/test/mysandbox Creating lib/python2.5 ... ...Installing http://svn.edgewall.org/repos/genshi/trunk#egg=Genshi-dev, http://trac.pocoo.org/repos/werkzeug/trunk#egg=Werkzeug-dev, http://svn.sqlalchemy.org/sqlalchemy/trunk#egg=SQLAlchemy-dev, setuptools >= 0.6b1, Genshi >= 0.5.dev-r698,==dev, Werkzeug >= 0.1.dev-r3831,==dev, SQLAlchemy >= 0.4.0.dev-r3203,==dev, AuthKit >= 0.3.0pre5 ...done. XXX: Use ". sandbox" to activate the development sandbox

rss