如何离开/退出/停用python virtualenv?

我使用的是virtualenv和virtualenvwrapper。 我可以使用workon命令在virtualenv之间切换。

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

但是,如何退出所有虚拟机并再次运行我的真机? 现在,我必须回到这个唯一的方式

 me@mymachine:~$ 

是退出shell并开始一个新的。 这有点烦人。 有没有一个“没有”的命令,如果是的话,那是什么? 如果这样的命令不存在,我将如何去创build它?

通常,激活一个virtualenv会给你一个名为:

 $ deactivate 

这使事情恢复正常。

编辑1

我刚刚再次查看了virtualenvwrapper,的代码,是的,它也支持deactivate从所有virtualenvs转义的方式。

编辑2

如果您试图离开Anaconda环境,则过程有点不同:运行双字命令source deactivate因为它们使用独立脚本实施停用。

 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. 

我定义了一个别名 workoff作为运作的反面:

 alias workoff='deactivate' 

容易记住:

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

激活python虚拟环境:

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

停用:

 $deactivate 
 $ deactivate 

如果这不起作用,请尝试

 $ source deactivate 

任何知道bash source作品的人都会觉得这很奇怪,但是一些关于virtualenv的包装/工作stream实现为source activate的恭维/对应。 因人而异

你可以使用virtualenvwrapper来减轻你使用virtualenvwrapper的方式

安装virtualenvwrapper

 pip install virtualenvwrapper 

如果你使用标准的shell,打开你的~/.bashrc~/.zshrc如果你使用了oh-my-zsh。 添加这两行:

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

要激活现有的virtualenv,请使用命令workon:

 $ workon myenv (myenv)$ 

为了停用你的virtualenv:

 (myenv)$ deactivate 

这里是我的教程 ,一步一步如何安装virtualenv和virtualenvwrapper

在处理安装脚本的时候自己也遇到了同样的问题,我查看了bin / activate_this.py做了什么,并将其反转。

例:

 #! /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()) 

不是100%确定它是否按预期工作,我可能完全错过了一些东西。

我使用基于autoenv的 zsh- autoenv 。

zsh-autoenv自动来源(已知/列入白名单) .autoenv.zsh文件,通常在项目根目录中使用。 它处理“进入”和“离开”事件,嵌套和variables存储(覆盖和恢复)。

这里是一个例子:

 ; 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 

所以,当我离开dtree目录时,虚拟环境会自动退出。

(my_env)basant @ basant:〜/ EonTraining / my_env $停用

使用“停用”

巴桑特@巴桑特联想-E40-80:〜/ EonTraining / my_env $

去(my_env);