virtualenvwrapper
What it is and what it does
virtualenvwrapper extends virtualenv by adding shell-based command wrappers and a centralized management system for Python virtual environments. Instead of manually navigating to different project directories and activating environments, you use simple commands like `mkvirtualenv` to create and `workon` to switch between environments. The package organizes all your virtual environments in one place and provides user-configurable hooks that run on creation, deletion, activation, and other operations—useful for automating setup tasks like installing project dependencies or running initialization scripts.
The package depends on virtualenv, virtualenv-clone, and stevedore (for plugin support). It is tested on Python 3.8 through 3.12 on macOS and Linux, and works with bash and zsh shells. The tool is designed to reduce friction when managing multiple projects with different dependency requirements, making it easier to avoid conflicts and switch contexts without manual environment management.
Use it for:
- Quickly create isolated environments for different projects and switch between them using single commands instead of navigating directories.
- Automate environment setup with hooks that run custom scripts when creating or activating environments.
- Organize all virtual environments in a single directory for easier backup, cleanup, and monitoring.
- Use tab completion to quickly list and select environments by name when switching projects.
- Extend virtualenvwrapper with custom plugins via the stevedore plugin system for team-specific workflows.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Provides shell command wrappers and hooks to organize, create, switch between, and manage multiple Python virtual environments from a central location.
Yes, if you work with multiple Python projects and use bash or zsh. virtualenvwrapper significantly reduces the friction of managing separate virtual environments by centralizing them and providing convenient shell commands. It is actively maintained, has no known vulnerabilities, and carries a permissive MIT license. The main gotcha is that it requires shell integration (sourcing in your shell config) and works only with bash/zsh, so it is not suitable for Windows PowerShell or other shells.
Install
virtualenvwrapper on PyPI
pip
pip install virtualenvwrapperuv
uv add virtualenvwrapperpoetry
poetry add virtualenvwrapperInstalling virtualenvwrapper
Before you install
Low friction installation as a pure Python wheel. Actively maintained with a recent commit on 2026-08-03 and production-stable status. Requires virtualenv 20+ as of the 5.x release.
License in practice
MIT license (permissive) allows use, modification, and distribution with minimal restrictions—suitable for both open-source and commercial projects.
Quickstart
pip install virtualenvwrapper
# Source the wrapper in your shell (e.g., ~/.bashrc or ~/.zshrc)
source /path/to/virtualenvwrapper.sh
# Create and activate a virtual environment
mkvirtualenv myproject
workon myproject
Requires bash or zsh shell; virtualenvwrapper is a set of shell functions and must be sourced in your shell configuration file to be available.
Verify before relying
- Whether the plugin system via stevedore enables third-party extensions and how to discover available plugins.
- Specific tab-completion behavior across different shell versions and whether it requires additional setup.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.8) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 3 — virtualenv, virtualenv-clone, stevedore |
| Maintenance | actively maintained — 670 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 149,153/month — #11,001 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: virtualenvwrapper-6.1.1-py3-none-any.whl
Keywords: virtualenv
Tags
More Utilities packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
charset-normalizerDetects and normalizes text encoding from…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
PygmentsPygments is a syntax highlighter that colorizes…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
virtualenvvirtualenv creates isolated Python environments…
permissive · top 100 on PyPI
isolateIsolate manages isolated Python environments…
unclear · top 15,000 on PyPI
argparse-extExtends Python's standard argparse module with…
copyleft · top 15,000 on PyPI
awscli-localProvides the `awslocal` command, a thin wrapper…
permissive · top 5,000 on PyPI
pep517Provides subprocess-isolated wrappers around…
permissive · top 5,000 on PyPI
virtualenv-cloneClones an existing Python virtualenv to a new…
permissive · top 5,000 on PyPI
pipenvPipenv automates Python virtual environment…
permissive · top 1,000 on PyPI
pyproject-hooksCalls build-backend hooks defined in…
permissive · top 1,000 on PyPI
nodeenvnodeenv creates isolated Node.js environments…
permissive · top 1,000 on PyPI
wraptwrapt provides a Python module for building…
permissive · top 100 on PyPI