如何离开/退出/停用Python virtualenv
我用的是virtualenv和VirtualenvRapper。我可以使用如何离开/退出/停用Python virtualenv,python,virtualenv,virtualenvwrapper,Python,Virtualenv,Virtualenvwrapper,我用的是virtualenv和VirtualenvRapper。我可以使用workon命令在virtualenv之间切换 me@mymachine:~$ workon env1 (env1)me@mymachine:~$ workon env2 (env2)me@mymachine:~$ workon env1 (env1)me@mymachine:~$ 如何退出所有虚拟机并再次在真实机器上工作?现在,我唯一能回到me@mymachine:~$将退出shell并启动一个新的shell。那有点
workon
命令在virtualenv之间切换
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
如何退出所有虚拟机并再次在真实机器上工作?现在,我唯一能回到
me@mymachine:~$
将退出shell并启动一个新的shell。那有点烦人。是否有“无”操作的命令,如果有,是什么命令?如果这样的命令不存在,我将如何创建它?通常,激活virtualenv会为您提供一个名为:
$ deactivate
这让一切恢复正常
我刚刚又专门研究了virtualnvwrapper
的代码,是的,它也支持停用
作为逃离所有virtualnv的方法
如果您试图离开环境,则该命令取决于您的conda
版本。最新版本(如4.6)直接在shell中安装conda
函数,在这种情况下,您可以运行:
conda deactivate
较旧的conda版本使用独立脚本执行停用:
source deactivate
我在编写安装程序脚本时遇到了同样的问题。我看了一下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%确定它是否按预期工作。我可能完全错过了什么。我定义了一个,workoff,作为workon的反面:
alias workoff='deactivate'
很容易记住:
[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
使用:
如果这不起作用,试试看
$ source deactivate
任何知道如何工作的人都会认为这很奇怪,但virtualenv的一些包装器/工作流将其作为
源代码激活
的补充/对应物来实现。您的里程数可能会有所不同。要激活Python虚拟环境,请执行以下操作:
$cd ~/python-venv/
$./bin/activate
deactivate
要停用:
$deactivate
您可以使用
virtualenvwrapper
来简化使用virtualenv
的方式
安装虚拟说唱歌手:
pip install virtualenvwrapper
如果使用标准shell,请打开~/.bashrc
或~/.zshrc
(如果使用)。添加以下两行:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
要激活现有virtualenv,请使用命令workon
:
$ workon myenv
(myenv)$
要停用您的virtualenv,请执行以下操作:
(myenv)$ deactivate
下面是如何安装virtualenv和virtualenvwrapper的逐步介绍。我使用的是基于
自动地
源(已知/白名单).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
目录时,虚拟环境将自动退出
“开发树实用程序”
只是一个名称……这里没有隐藏的链接到照明装置的意思。使用停用
(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$
#!/bin/bash
declare -Ff deactivate && deactivate
请注意,(my_env)
已消失。只需在虚拟环境中的命令行中键入以下命令:
$cd ~/python-venv/
$./bin/activate
deactivate
我发现在Miniconda3环境中,我必须运行:
conda deactivate
deactivate
和source deactivate
对我都不起作用。由于通过在~/bin/activate
中查找此类命令的常规方法无法发现由源代码~/bin
创建的deactivate
函数,因此您可能希望创建一个仅执行该函数的函数e
(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$
#!/bin/bash
declare -Ff deactivate && deactivate
问题在于,名为deactivate
的脚本包含单个命令deactivate
,如果在不在venv中的情况下意外执行,将导致无休止的循环。这是一个常见错误
如果功能存在(即通过寻源activate
创建),则仅通过执行deactivate
即可避免此问题
使用venv的激活
脚本提供的停用
功能,要求您相信停用功能已正确编码以干净地将所有环境变量重置回原来的状态-不仅考虑原始激活,还考虑任何开关、配置,或者你在此期间可能做过的其他工作
这可能没什么问题,但它确实引入了一种新的非零风险,即在以后修改环境
然而,从技术上讲,一个过程不可能直接改变其父进程的环境变量,因此我们可以使用一个单独的子外壳来绝对确保我们的venv
s不会留下任何剩余的变化:
要激活:
$bash--init文件PythonVenv/bin/activate
- 这将在
venv
周围启动一个新的shell。您原来的bash
shell保持不变
要停用:
$exit
或[CTRL]
+[D]
- 这将退出
venv
所在的整个shell,并在激活脚本对环境进行任何更改之前将您放回原始shell
例子:
它非常简单,以便停用您的虚拟环境
- 如果使用蟒蛇-使用
conda停用
- 如果不使用蟒蛇
-使用源代码停用
对于我的特殊情况,我转到工作目录
CD /myworkingdirectory
然后我激活我的环境,如下所示:
my-env/scripts/activate
从同一个工作文件夹(/myworkingdirectory
)中,我尝试了此操作,但没有任何效果:
my-env/scripts/deactivate
这确实有效:
deactivate
“deactivate”命令不是二进制文件,也不是您“源”的脚本;它是一个shell别名,由“activate”脚本在您当前的shell中动态定义。@Apreche同时(大约四年后)这似乎已经出现在文档中。如果称为“workoff”或或者如果“工作”被称为“激活”