virtualenv - 如何保留/ 退出/ 取消激活一个python虚拟环境?

  显示原文与译文双语对照的内容

我正在使用 virtualenv 和 virtualenvwrapper 。 使用工作操作 command, virtualenv的我之间可以 switch 只是好极了。


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

但是,如何退出所有虚拟机并重新运行我的真实机器? 现在我唯一能回到

 
me@mymachine:~$

 

是退出外壳并启动一个新的。 这有点烦人。是否有关于"没有"的命令,如果有的话,它是什么? 如果该命令不存在,如何创建它?

时间:

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

 
$ deactivate

 

这使事情回到正常。

在所有编辑: 我有去看看专为virtualenvwrapper再次到代码,并的,是的,它也支持"停用"作为一种方法来 escape.

编辑:如果你试图离开Anaconda环境,过程会有所不同: 运行two-word命令 source deactivate,因为它们使用独立脚本实现停用。

我定义了一个别名workoff,与工作方式相反:


alias workoff='deactivate'

容易记住:


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

如果同样的问题我自己,同时致力于一个安装程序脚本,我关注了一下什么是 bin/activate_this hosts.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%,如果它按预期工作的话,我可能漏掉了一些东西。

...