How to leave/exit/deactivate a Python virtualenv – Dev

The best answers to the question “How to leave/exit/deactivate a Python virtualenv” in the category Dev.


I’m using virtualenv and the virtualenvwrapper. I can switch between virtualenv’s just fine using the workon command.

[email protected]:~$ workon env1
(env1)[email protected]:~$ workon env2
(env2)[email protected]:~$ workon env1
(env1)[email protected]:~$ 

How do I exit all virtual environments and work on my system environment again? Right now, the only way I have of getting back to [email protected]:~$ is to exit the shell and start a new one. That’s kind of annoying. Is there a command to work on “nothing”, and if so, what is it? If such a command does not exist, how would I go about creating it?



$ deactivate 

If this doesn’t work, try

$ source deactivate

Anyone who knows how Bash source works will think that’s odd, but some wrappers/workflows around virtualenv implement it as a complement/counterpart to source activate. Your mileage may vary.


Usually, activating a virtualenv gives you a shell function named:

$ deactivate

which puts things back to normal.

I have just looked specifically again at the code for virtualenvwrapper, and, yes, it too supports deactivate as the way to escape from all virtualenvs.

If you are trying to leave an Anaconda environment, the command depends upon your version of conda. Recent versions (like 4.6) install a conda function directly in your shell, in which case you run:

conda deactivate

Older conda versions instead implement deactivation using a stand-alone script:

source deactivate


To activate a Python virtual environment:

$cd ~/python-venv/

To deactivate:



I defined an alias, workoff, as the opposite of workon:

alias workoff="deactivate"

It is easy to remember:

[[email protected] ~]$ workon django_project
(django_project)[[email protected] ~]$ workoff
[[email protected] ~]$