题 如何离开/退出/停用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并开始一个新的。那有点烦人。是否有“无所事事”的命令,如果有,那是什么?如果这样的命令不存在,我将如何创建它?


1070
2018-06-13 14:15


起源


有一个命令可以“无所事事” - 它显示所有可用的虚拟环境,非常漂亮。只需键入没有参数的“workon”并按Enter键。离开的命令是“停用”,如下所述。 - Dannid


答案:


通常,激活virtualenv会为您提供一个名为的shell函数:

$ deactivate

这让事情恢复正常。

编辑1

我刚才再次专门看了代码 virtualenvwrapper, 而且,是的,它也支持 deactivate 作为摆脱所有virtualenvs的方式。

编辑2

如果你想留下一个 蟒蛇 环境,程序有点不同:运行双字命令 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.

1766
2018-06-13 14:31



我的virtualenv没有停用命令 - Prof. Falken
“deactivate”命令不是二进制文件,也不是“源”的脚本;它是一个shell别名,可以通过“activate”脚本在当前shell中动态定义。 - Brandon Rhodes
@Apreche在此期间(差不多四年后),这似乎已经存在 添加 到文档。 - gertvdijk
如果被称为“workoff”或“unworkon”,会更加直观。或者如果“workon”被称为“激活”。谢天谢地说别名。 - kkurian
猜猜调用“workon”里面的实际virtualenv命令是什么? ......(剧透警告)......(剧透警告)......(剧透警告)......(剧透警告)......激活! - FutureNerd


我定义了一个 别号  workoff 与workon相反:

alias workoff='deactivate'

容易记住:

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

33
2018-01-14 16:23



在哪个文件? .bashrc? - seyed
@seyed是的,看 这个答案 作为别名的一个例子 ~/.bashrc - Bob Stein
我喜欢这个别名。让我想起了空手道小子(蜡像;蜡像) - C0deH4cker
太棒了!我真的很喜欢这个;) - Yasser Sinjab


$ deactivate 

如果这不起作用,请尝试

$ source deactivate

任何知道如何的人 庆典 source 作品会认为这很奇怪,但围绕virtualenv的一些包装/工作流程实现为赞美/对应 source activate。因人而异


22
2018-04-12 06:41



deactivate 是一个在您获取时创建的函数 activate 文件。你的建议 source deactivate 完全没有意义,因为没有名字的文件 deactivate - Anthon
这不值得投票。请参阅编辑所选响应:source deactivate用于anaconda环境。 - Doug Bradshaw
它“值得”因为没有达到SO而受到抨击 回答 质量标准。这不仅仅是一个评论而是一个答案。但是,由于海报的79声誉,我们应该很好并提供良好的反馈。 - Bruno Bronosky
@Abdul我已经演示了如何在修订版2中提高答案质量 stackoverflow.com/posts/29586756/revisions - Bruno Bronosky
如果你的shell中没有deactivate命令,这是非常无用的。我真的不明白为什么这会有助于解决这个问题。虚拟环境中没有停用脚本。 - bgenchel


激活python虚拟环境:

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

停用:

$deactivate

10
2017-11-26 07:06



在OS X10.11.1上的终端中,我似乎必须使用: $source activate - Eric Milliot-Martinez
我不需要来源。我做到了 $cd /to/dir/i/want/my/virtualenv/installed 然后 $virtualenv name_i_want_for_it 然后 $. name_i_want_for_it/bin/activate virtualenv对我来说似乎还有点不对劲。需要改进...... - uchuugaka
“source”与“。”相同。 command ..或者可以用来源文件 - Corey Goldberg


您可以使用 virtualenvwrapper 为了方便您的工作方式 virtualenv

安装 virtualenvwrapper

pip install virtualenvwrapper

如果您使用的是标准外壳,请打开您的 ~/.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一步一步


1
2017-09-01 05:13



与内置的virtualenv相比,我认为差别不大 - Nam G VU
@NamGVU注意到 workon 命令,它适用于任何目录。 - igaurav
OP已经在使用 virtualenvwrapper,不是吗? - Radon Rosborough
真的不行。 deactivate: command not found. - Schütze


我用 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 目录,虚拟环境自动退出。


0
2018-02-14 10:50





(my_env)basant @ basant:〜/ EonTraining / my_env $ deactivate

使用'停用'

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

走了(my_env);


0
2017-09-03 06:43





在处理安装程序脚本时我自己也有同样的问题,我看了一下 斌/ 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%确定它是否按预期工作,我可能完全错过了一些东西。


-2
2017-12-11 18:18



如果取消激活重置环境路径,系统路径,默认提示的值,那么您的停用功能是很好的方法。我喜欢你的剧本。已经给了+1。 - Ramkumar D