我正在使用virtualenv和virtualenvwrapper。我可以使用workon
命令在virtualenv之间切换。
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
但是,如何退出所有虚拟机并再次在我的真机上工作?现在,我回到的唯一方法
me@mymachine:~$
是退出shell并开始一个新的。那有点烦人。是否有一个“无所事事”的命令,如果有的话,它是什么?如果这样的命令不存在,我将如何创建它?
通常,激活virtualenv会为您提供一个名为的shell函数:
$ deactivate
这让事情恢复正常。
我刚刚再次查看virtualenvwrapper,
的代码,是的,它也支持deactivate
作为逃避所有virtualenvs的方法。
如果您尝试离开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.
我将alias的工作量定义为workon的反面:
alias workoff='deactivate'
容易记住:
[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
$ deactivate
如果这不起作用,请尝试
$ source deactivate
任何知道bash source
如何工作的人会认为这很奇怪,但围绕virtualenv的一些包装/工作流程实现为source activate
的赞美/对应。因人而异
激活python虚拟环境:
$cd ~/python-venv/
$./bin/activate
停用:
$deactivate
您可以使用virtualenvwrapper
来简化您使用virtualenv
的方式
安装virtualenvwrapper
pip install virtualenvwrapper
如果您使用的是标准外壳,请使用oh-my-zsh打开~/.bashrc
或~/.zshrc
。添加这两行:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
要激活现有的virtualenv,请使用命令workon:
$ workon myenv
(myenv)$
为了停用你的virtualenv:
(myenv)$ deactivate
这是我的tutorial,如何安装virtualenv和virtualenvwrapper一步一步
使用deactivate
。
(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$
注意,(my_env)
消失了。
我发现在Miniconda3环境中我必须运行:
conda deactivate
deactivate
和source deactivate
都没有为我工作。
我使用基于zsh-autoenv的autoenv。
zsh-autoenv自动获取(已知/列入白名单)
.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
目录时,将自动退出虚拟环境。
在处理安装程序脚本时我自己遇到了同样的问题,我看了一下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%确定它是否按预期工作,我可能完全错过了一些东西。