New release: virtualenvwrapper

Last week I finally cleaned up the wrapper code I’ve been using with
Ian Bicking’s virtualenv. The results are a set of bash functions
imaginatively dubbed “virtualenvwrapper”.

The basic idea is that you source the script in your ~/.bashrc,
and then you can use the functions it defines to manage your virtual
environments, either from other scripts or from the command line.

mkvirtualenv is a thin wrapper around virtualenv itself, and
creates environments in a special directory, which you can control
through the WORKON_HOME variable. Now that I think of it, that variable
should probably have a different name. Oh, well.

Most of the time, you’ll use the function workon. Without
arguments, it will list the environments you have available. With a
single argument, it switches to that environment.

Once you’re done with an environment, use rmvirtualenv to remove
it.

So it’s nothing earth-shattering, but I find it very useful. I put it
together because I create and delete virtual environments so frequently
– one per article and column for the magazine, plus one for each of my
own projects – that I really needed to enforce some sanity around them.

In addition to the organization, the extra feature workon adds is
activation hooks for the environment. Each time you switch
environments, workon looks for (and runs)
$VIRTUAL_ENV/bin/predeactivate in the current environment (before
switching) and $VIRTUAL_ENV/bin/postactivate in the new environment
(after switching). The hooks are intended for saving editor state,
loading new project files, etc.

For now there’s just one file, but I’m still distributing it in a
versioned tarball because that’s just easier with my existing workflow
and release tools. I’m not sure how to use distutils with a bash script,
or even if that’s a good idea, so it’s a manual download, too.