How to leave/exit/deactivate a python virtualenv?

2019-01-07 01:35发布

问题:

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

me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$ 

However, how do I exit all virtual machines and workon my real machine again? Right now, the only way I have of getting back to

me@mymachine:~$ 

is to exit the shell and start a new one. That's kind of annoying. Is there a command to workon "nothing", and if so, what is it? If such a command does not exist, how would I go about creating it?

回答1:

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

$ deactivate

which puts things back to normal.

Edit 1

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.

Edit 2

If you are trying to leave an Anaconda environment, the procedure is a bit different: run the two-word command source deactivate since they implement deactivation using a stand-alone script.

bash-4.3$ deactivate
pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate'
bash-4.3$ source deactivate
pyenv-virtualenv: no virtualenv has been activated.


回答2:

I defined an alias workoff as the opposite of workon:

alias workoff='deactivate'

Easy to remember:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$


回答3:

$ 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 as a compliment/counterpart to source activate. YMMV



回答4:

to activate python virtual environment:

$cd ~/python-venv/
$./bin/activate

to deactivate:

$deactivate


回答5:

You can use virtualenvwrapper in order to ease the way you work with virtualenv

Installing virtualenvwrapper

pip install virtualenvwrapper

If you are using standard shell, open your ~/.bashrc or ~/.zshrc if you use oh-my-zsh. Add this two lines:

export WORKON_HOME=$HOME/.virtualenvs  
source /usr/local/bin/virtualenvwrapper.sh

To activate an existing virtualenv, use command workon:

$ workon myenv
(myenv)$

In order to deactivate your virtualenv:

(myenv)$ deactivate

Here is my tutorial, step by step in how to install virtualenv and virtualenvwrapper



回答6:

I use zsh-autoenv which is based off autoenv.

zsh-autoenv automatically sources (known/whitelisted) .autoenv.zsh files, typically used in project root directories. It handles "enter" and leave" events, nesting, and stashing of variables (overwriting and restoring).

Here is an example:

; cd dtree 
Switching to virtual environment: Development tree utiles
;dtree(feature/task24|✓); cat .autoenv.zsh       
# Autoenv.
echo -n "Switching to virtual environment: "
printf "\e[38;5;93m%s\e[0m\n" "Development tree utiles"
workon dtree
# eof
dtree(feature/task24|✓); cat .autoenv_leave.zsh 
deactivate

So when I leave the dtree directory, the virtual environment is automatically exited.



回答7:

(my_env) basant@basant:~/EonTraining/my_env$ deactivate

use 'deactivate'

basant@basant-Lenovo-E40-80:~/EonTraining/my_env$

Gone (my_env);



回答8:

Had the same problem myself while working on an installer script, I took a look at what the bin/activate_this.py did and reversed it.

Example:

#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys

# path to virtualenv
venv_path = os.path.join('/home', 'sixdays', '.virtualenvs', 'test32')

# Save old values
old_os_path = os.environ['PATH']
old_sys_path = list(sys.path)
old_sys_prefix = sys.prefix


def deactivate():
    # Change back by setting values to starting values
    os.environ['PATH'] = old_os_path
    sys.prefix = old_sys_prefix
    sys.path[:0] = old_sys_path


# Activate the virtualenvironment
activate_this = os.path.join(venv_path, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))


# Print list of pip packages for virtualenv for example purpose
import pip
print str(pip.get_installed_distributions())
# Unload pip module
del pip

# deactive/switch back to initial interpreter
deactivate()

# print list of initial environment pip packages for example purpose
import pip
print str(pip.get_installed_distributions())

Not 100% sure if it works as intended, I may have missed something completely.



回答9:

Simply type the following command on the command line:

deactivate