How to leave/exit/deactivate a Python virtualenv
Categories:
How to Deactivate or Exit a Python virtualenv

Learn the essential commands and best practices for exiting a Python virtual environment, including standard deactivate
and Virtualenvwrapper methods.
Python virtual environments are crucial for managing project dependencies, ensuring that each project has its own isolated set of packages. This prevents conflicts between different projects that might require different versions of the same library. However, once you're done working within a virtual environment, it's important to know how to properly exit or deactivate it. This article will guide you through the standard methods for leaving a virtual environment and cover common scenarios, including using Virtualenvwrapper.
Understanding Virtual Environments
A virtual environment creates an isolated Python installation for a specific project. When activated, your shell's PATH
variable is modified to prioritize the virtual environment's Python interpreter and installed packages. This means that any pip install
commands will install packages into that specific environment, and python
commands will execute using that environment's interpreter. Deactivating the environment reverses these changes, returning your shell to its global Python configuration.
flowchart TD A[Start Project Work] --> B{Activate virtualenv} B --> C[Install Dependencies] C --> D[Develop Code] D --> E{Finish Work?} E -->|Yes| F[Deactivate virtualenv] E -->|No| D F --> G[Return to Global Python]
Typical workflow with a Python virtual environment
Standard Method: The deactivate
Command
The most common and straightforward way to exit a virtual environment created with venv
or virtualenv
is by using the deactivate
command. This command is automatically made available in your shell once a virtual environment is activated. It works by undoing the modifications made to your shell's environment variables, specifically the PATH
variable, which points to the virtual environment's binaries.
(myenv) $ deactivate
Deactivating a virtual environment
After running deactivate
, your shell prompt will typically revert to its normal appearance (e.g., the (myenv)
prefix will disappear), indicating that you are no longer operating within the virtual environment. Any subsequent python
or pip
commands will then refer to your system's global Python installation.
Using Virtualenvwrapper: deactivate
and workon
Virtualenvwrapper is a set of extensions for virtualenv
that makes managing virtual environments much easier. While it provides additional commands for creating and switching environments, the deactivate
command still functions identically to the standard method.
(myenv) $ deactivate
Deactivating a virtualenvwrapper environment
One of the powerful features of Virtualenvwrapper is the workon
command. If you are currently in one virtual environment and use workon
to switch to another, the currently active environment is automatically deactivated before the new one is activated. This means you don't explicitly need to run deactivate
first.
(myenv) $ workon another_env
(another_env) $
Switching environments with workon
(implicitly deactivates the previous one)
workon
handles deactivation for you when switching. If you just want to leave all virtual environments, deactivate
is still the command to use.Troubleshooting: When deactivate
Doesn't Work
Occasionally, you might encounter situations where deactivate
doesn't seem to work as expected. This can happen if your shell's environment variables are in an unusual state, or if the activation script didn't run correctly. In such rare cases, you can manually reset your PATH
variable, though this is generally not recommended as a primary solution.
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
# Or, if you know your original PATH, set it back manually
# export PATH="$OLD_PATH"
Manually resetting the PATH variable (use with caution)
PATH
can have unintended side effects. Only do this if deactivate
consistently fails and you understand the implications. A simpler solution is often to close and reopen your terminal.Another common reason for deactivate
not working is if the virtual environment was never properly activated in the first place, or if the shell session was started without the virtual environment's activation script being sourced. Always ensure you activate your environment using source /path/to/myenv/bin/activate
(or call
on Windows) before expecting deactivate
to function.