Release History



  • Add tmp- prefix to temporary environment names created by mktmpenv.
  • Fix some uses of cd that did not account for possible aliasing. Contributed by Ismail Badawi (ibadawi).
  • Fix documentation for allvirtualenv, contributed by Andy Dirnberger (dirn).
  • Add --force option to mkproject, contributed by Clay McClure (claymcclure).
  • Fix handling for project directory argument -a to mkvirtualenv, based on work by Xupeng Yun.
  • Dropped python 3.2 testing.
  • Updated test configuration so they work properly under Linux.
  • Resolve relative paths before storing the project directory reference in setvirtualenvproject. (issue 207)
  • Do not create hooks for rmproject, since there is no such command. (issue 203)
  • Update the tests to use a valid template for creating temporary directories under Linux.
  • Fix the use of which in in case it is aliased.
  • Fix an issue with recursion in completion expansion crashing zsh, contributed by blueyed.


  • Fix packaging issue with 4.1.


  • Ensure that all $() style commands that produce paths are quoted. Addresses issue 164.
  • Add wipeenv command for removing all packages installed in the virtualenv.
  • Allow users of to extend the list of API commands that trigger the lazy-loader by extending _VIRTUALENVWRAPPER_API. Patch contributed by John Purnell, see issue 188.
  • Fix detection of --python option to mkvirtualenv. Resolves issue 190.
  • Add allvirtualenv command to run a command across all virtualenvs. Suggested by Dave Coutts in issue 186.
  • Fix lsvirtualenv when there are spaces in WORKON_HOME. Resolves issue 194.
  • Switch to pbr for packaging.


Warning: This release includes some potentially incompatible changes for extensions. The python modules for extensions are now always run with PWD=$WORKON_HOME (previously the value of PWD varied depending on the hook). The shell portion of any hook (anything sourced by the user’s shell when the hook is run) is still run in the same place as before.

  • All tests pass under Python 2.6, 2.7, 3.2 and 3.3.
  • Fix the name of the script in an error message produced by (Contributed by scottstvnsn.)


  • Rename functions for generating help so they do not pollute the global namespace, and especially so they do not interfere with tab completion. Contributed by davidszotten.
  • Fix an issue with listing project templates if none are installed. (issue 179)
  • Fix an issue with the --python option to mkvirtualenv becoming sticky for future calls that do not explicitly specify the option. (issue 178)


  • Improve tab-completion support for users of the lazy-loading mode. (upsuper)
  • Add --help option to mkproject.
  • Add --help option to workon.
  • Turn off logging from the hook loader by default, and replace VIRTUALENVWRAPPER_LOG_DIR environment variable with VIRTUALENVWRAPPER_LOG_FILE. The rotating log behavior remains the same. The motivation for this change is the race condition caused by that rotating behavior, especially when the wrappers are being used by users with different permissions and umasks. (issue 152)
  • Use flake8 for style checking.


  • Replace realpath with a more portable way of converting a relative path to an absolute path, used with the --python option to mkvirtualenv (contributed by Radu Voicilas, rvoicilas).
  • Posted release to PyPI, resolving download redirect issue. (issue 171 and issue 172)


  • Switch to stevedore for plugin management
  • mkvirtualenv_help should use $VIRTUALENVWRAPPER_PYTHON instead of calling virtualenv directly (issue 148).
  • Fix issue with lazy-loader code under zsh (issue 144).
  • Fix issue with noclobber option under zsh (issue 137). Fix based on patch from rob_b.
  • Fix documentation for add2virtualenv to show the correct name for the file containing the new path entry. (contributed by rvoicilas)
  • Fix problem with virtualenvwrapper_show_workon_options under zsh with chpwd functions that produce output. (issue 153)


  • Rewrite cpvirtualenv to use virtualenv-clone instead of making the new environment relocatable. Contributed by Justin Barber (barberj). This also resolves a problem with cpvirtualenv not honoring the --no-site-packages flag (issue 102).
  • Update docs with link to virtualenvwrapper-win port by David Marble.
  • Use command to avoid functions named the same as common utilities. (issue 119)



  • Clean up file permissions and remove shebangs from scripts not intended to be executed on the command line. (contributed by ralphbean)
  • Worked on some brittle tests.
  • Received updates to Japanese translation of the documentation from t2y.
  • Fix the test script and runner so the user’s $WORKON_HOME is not erased if they do not have some test shells installed. (big thanks to agriffis).
  • If the hook loader is told to list plugins but is not given a hook name, it prints the list of core hooks.
  • Merge several fixes for path and variable handling for MSYS users from bwanamarko. Includes a fix for issue 138.
  • Change mkvirtualenv so it catches both -h and --help.
  • Fix some issues with the way temporary files are used for hook scripts. (contributed by agriffis)
  • Allow relative path to requirements file with mkvirtualenv and -r option. (barberj)
  • Make whitespace consistent. (agriffis)


  • Make project_dir a local variable so that cdproject does not interfere with other variables the user might have set. (contributed by slackorama)
  • Fix typo in documentation reported by Nick Martin.
  • Change trove classifier for license “MIT” to reflect the license text presented in the documentation. This does not indicate a change in the license, just a correction to the expression of that intent. See :ref:`license` (contributed by ralphbean as fix for issue 134)
  • Extend rmvirtualenv to allow removing more than one environment at a time. (contributed by ciberglo)
  • Change the definition of virtualenvwrapper_get_site_packages_dir to ask distutils for the site-packages directory instead of trying to build the path ourselves in the shell script. This should resolve issue 112 and improve support for Python interpreters other than C Python. Thanks to Carl Meyer and Dario Bertini for their contributions toward the fix.


  • Fix a problem with activation hooks when associating a new virtualenv with an existing project directory. (issue 122)
  • Fix a problem with command-add2virtualenv and paths containing “special” characters such as &. (issue 132)


  • Fix some packaging issues that made it more difficult to run the tests directly from the sdist package. (issue 126)


  • Add Python 3 support, thanks in large part to the efforts of Daniel Kraus (dakra). Tested under Python 2.6, 2.7, and 3.2.


  • Remove the initialization shortcut because it breaks tab completion in sub-shell environments like screen and tmux. (issue 121)


  • Add -a option to mkvirtualenv to associate a new virtualenv with an existing project directory. Contributed by Mike Fogel (mfogel).
  • Drops support for Python 2.4 and 2.5. The tools may still work, but I no longer have a development environment set up for testing them, so I do not officially support them.
  • Shortcut initialization if it has run before.
  • Set hook log file permissions to be group-writable. (issue 62 reported by hedgeddown)
  • Add VIRTUALENVWRAPPER_PROJECT_FILENAME variable so the .project file used to link a virtualenv to a project can be renamed to avoid conflicts with other tools. (issue 120 reported by arthuralvim)



  • Incorporated patch to add -d option to command-add2virtualenv, contributed by miracle2k.
  • Add -i option to mkvirtualenv.
  • Add mktmpenv command for creating temporary environments that are automatically removed when they are deactivated.
  • Fixed a problem with hook_loader that prevented it from working under Python 2.5 and 2.4.
  • Fix a problem with the way template names were processed under zsh. (issue 111)


  • Change the shell function shell definition syntax so that ksh will treat typeset-declared variables as local. No kidding.
  • Merge the “project directory” features of the virtualenvwrapper.project plugin into the main project, adding mkproject, cdproject, and setvirtualenvproject commands.
  • Add -r option to mkvirtualenv to install dependencies using a pip requirements file.


  • Use VIRTUALENVWRAPPER_VIRTUALENV in cpvirtualenv (issue 104).
  • Add support for MSYS environment under Windows. Contributed by Axel H. (noirbizarre).


  • Move setup code for tab completion later in the startup code so all of the needed variables are configured. (issue 97)
  • Expand tab completion for zsh to work for all commands.


  • When testing for WORKON_HOME during startup, dereference any symlink to make sure it is a directory.
  • Set VIRTUALENVWRAPPER_HOOK_DIR and VIRTUALENV_WRAPPER_LOG DIR in virtualenvwrapper_initialize after WORKON_HOME is set (issue 94).
  • Update the Basic Installation instructions to be more explicit about needing to install virtualenvwrapper globally (or at least outside of a virtualenv).


  • Fix problem with space in WORKON_HOME path (issue 79).
  • Fix problem with argument processing in lsvirtualenv under zsh (issue 86). Thanks to Nat Williams (natw) for the bug report and patch.
  • If WORKON_HOME does not exist, create it. Patch from Carl Karsten (CarlFK). Test updates based on patches from Matt Austin (maafy6) and Hugo Lopes Tavares (hltbra).
  • Merge in contributions from Paul McLanahan (pmclanahan) to fix the test harness to ensure that the test scripts are actually running under the expected shell.
  • Merge in new shell command toggleglobalsitepackages from Paul McLanahan (pmclanahan). The new command changes the configuration of the active virtualenv to enable or disable the global site-packages directory.
  • Fixed some tests that were failing under ksh on Ubuntu 10.10.
  • Implement suggestion by Van Lindberg to have VIRTUALENVWRAPPER_HOOK_DIR and VIRTUALENVWRAPPER_LOG_DIR variables to control the locations of hooks and logs.
  • Enabled tab completion for showvirtualenv (issue 78).
  • Fixed a problem with running rmvirtualenv from within the environment being removed (issue 83).
  • Removed use of -e option in calls to grep for better portability (issue 85).


  • Hard-code the version information in the and scripts. This still doesn’t work for, since the doc build needs the sphinxcontrib.bitbucket extension, but will make it easier to transition the docs to another site later.



  • Fixed virtualenvwrapper_get_python_version (issue 73).


  • Fixed a problem with hook script line endings under Cygwin (issue 68).
  • Updated documentation to include a list of the compatible shells (Supported Shells) and Python versions (Python Versions) (issue 70).
  • Fixed installation dependency on virtualenv (issue 60).
  • Fixed the method for determining the Python version so it works under Python 2.4 (issue 61).
  • Converted the test infrastructure to use tox instead of home-grown scripts in the Makefile.


  • Point release uploaded to PyPI during outage on



  • Make workon list brief environment details when run without argument, instead of full details.




  • Added get_env_details hook.


  • Integrate Fred Palmer’s patch to escape more shell commands to avoid aliases. Resolves issue 57.
  • Fix a problem with egrep argument escaping (issue 55).
  • Fix a problem with running mkvirtualenv without arguments (issue 56).


  • Escape which calls to avoid aliases. Resolves issue 46.
  • Integrate Manuel Kaufmann’s patch to unset GREP_OPTIONS before calling grep. Resolves issue 51.
  • Escape $ in regex to resolve issue 53.
  • Escape rm to avoid issues with aliases and resolve issue 50.


  • Switched hook loader execution to a form that works with Python 2.4 to resolve issue 43.
  • Tested under Python 2.7b1. See issue 44.
  • Incorporated performance improvements from David Wolever. See issue 38.
  • Added some debug instrumentation for issue 35.



  • Add support for ksh. Thanks to Doug Latornell for doing the research on what needed to be changed.
  • Test import of virtualenvwrapper.hook_loader on startup and report the error in a way that should help the user figure out how to fix it (issue 33).
  • Update mkvirtualenv documentation to include the fact that a new environment is activated immediately after it is created (issue 30).
  • Added hooks around cpvirtualenv.
  • Made deactivation more robust, especially under ksh.
  • Use Python’s tempfile module for creating temporary filenames safely and portably.
  • Fix a problem with virtualenvwrapper_show_workon_options that caused it to show * as the name of a virtualenv when no environments had yet been created.
  • Change the hook loader so it can be told to run only a set of named hooks.
  • Add support for listing the available hooks, to be used in help output of commands like virtualenvwrapper.project’s mkproject.
  • Fix mkvirtualenv -h option behavior.
  • Change logging so the $WORKON_HOME/hook.log file rotates after 10KiB.


  • Fixed issue 32, making virtualenvwrapper.user_scripts compatible with Python 2.5 again.


  • Fixed issue 29, to use a default value for TMPDIR if it is not set in the user’s shell environment.


  • Rewrote hook management using Distribute entry points to make it easier to share extensions.


  • Added cpvirtualenv command [Thomas Desvenain]


  • Fix a problem with error messages showing up during init for users with the wrappers installed site-wide but who are not actually using them. See issue 26.
  • Split up the tests into multiple files.
  • Run all tests with all supported shells.


  • Merged in changes to cdsitepackages from William McVey. It now takes an argument and supports tab-completion for directories within site-packages.



  • Add license text to the header of the script.


  • Resolve a bug with the preactivate hook not being run properly. Refer to issue 21 for complete details.


  • Resolve a bug with the postmkvirtualenv hook not being run properly. Refer to issue 19 and issue 20 for complete details.


  • Automatically create any missing hook scripts as stubs with comments to expose the feature in case users are not aware of it.


  • Better protection of $WORKON_HOME does not exist when the wrapper script is sourced.


  • Incorporate lssitepackages feature from Sander Smits.
  • Refactor some of the functions that were using copy-and-paste code to build path names.
  • Add a few tests.


  • Fix problem with add2virtualenv and relative paths. Thanks to Doug Latornell for the bug report James Bennett for the suggested fix.


  • Incorporate patch from Sascha Brossmann to fix a issue 15. Directory normalization was causing WORKON_HOME to appear to be a missing directory if there were control characters in the output of pwd.


  • Remove warning during installation if sphinxcontrib.paverutils is not installed. (issue 10)
  • Added some basic developer information to the documentation.
  • Added documentation for deactivate command.


  • Added documentation updates provided by Steve Steiner.


  • Merged in changes to cdvirtualenv from wam and added tests and docs.
  • Merged in changes to make error messages go to stderr, also provided by wam.


  • Better error handling in mkvirtualenv.
  • Remove bogus VIRTUALENV_WRAPPER_BIN variable.


  • Wrap the virtualenv version of deactivate() with one that lets us invoke the predeactivate hooks.
  • Fix virtualenvwrapper_show_workon_options for colorized versions of ls and write myself a note so I don’t break it again later.
  • Convert to use true tests with shunit2


  • Fix issue 5 by correctly handling symlinks and limiting the list of envs to things that look like they can be activated.


  • Check return value of virtualenvwrapper_verify_workon_home everywhere, thanks to Jeff Forcier for pointing out the errors.
  • Fix instructions at top of README, pointed out by Matthew Scott.
  • Add cdvirtualenv and cdsitepackages, contributed by James Bennett.
  • Enhance


  • Optimize virtualenvwrapper_show_workon_options.
  • Add global postactivate hook.



  • Add more hooks for operations to run before and after creating or deleting environments based on changes from Chris Hasenpflug.


  • Corrected a problem with change to mkvirtualenv that lead to release 1.8 by using an alternate fix proposed by James in comments on release 1.4.


  • Fix for processing the argument list in mkvirtualenv from jorgevargas (issue 1)


  • Move to for hosting
  • clean up TODO list and svn keywords
  • add license section below


  • More zsh support (fixes to rmvirtualenv) from Byron Clark.


  • Add completion support for zsh, courtesy of Ted Leung.


  • Fix some issues with spaces in directory or env names. They still don’t really work with virtualenv, though.
  • Added documentation for the postactivate and predeactivate scripts.


  • Includes a new .pth management function based on work contributed by James Bennett and Jannis Leidel.


  • Includes a fix for a nasty bug in rmvirtualenv identified by John Shimek.