我正在使用virtualenv和virtualvwrapper。我可以使用workon命令在virtualenv之间切换。
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
如何退出所有虚拟环境并再次使用系统环境?现在,我唯一能回到me@mymachine:~$是退出shell并开始新的shell。这有点烦人。是否有命令处理“无”,如果有,是什么?如果不存在这样的命令,我将如何创建它?
您可以使用virtualvwrapper来简化使用virtualenv的方式。
安装virtualvwrapper:
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和virtualvwrapper。
我在编写安装程序脚本时遇到了同样的问题。我看了一下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
# Deactivate/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自动sources(已知/白名单).autoenv.zsh文件,通常用于项目根目录。它处理“进入”和“离开”事件,嵌套和隐藏变量(覆盖和恢复)。
下面是一个示例:
; 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目录时,虚拟环境将自动退出。
“开发树实用程序”只是一个名字……没有隐藏的意思是链接到这里的光明会。