如何离开/退出/停用Python virtualenv

问题描述 投票:1284回答:9

我正在使用virtualenv和virtualenvwrapper。我可以使用workon命令在virtualenv之间切换。

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

但是,如何退出所有虚拟机并再次在我的真机上工作?现在,我回到的唯一方法

me@mymachine:~$ 

是退出shell并开始一个新的。那有点烦人。是否有一个“无所事事”的命令,如果有的话,它是什么?如果这样的命令不存在,我将如何创建它?

python virtualenv virtualenvwrapper
9个回答
2142
投票

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

$ deactivate

这让事情恢复正常。

Edit 1

我刚刚再次查看virtualenvwrapper,的代码,是的,它也支持deactivate作为逃避所有virtualenvs的方法。

Edit 2

如果您尝试离开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.

39
投票

我将alias的工作量定义为workon的反面:

alias workoff='deactivate'

容易记住:

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

39
投票
$ deactivate 

如果这不起作用,请尝试

$ source deactivate

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


11
投票

激活python虚拟环境:

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

停用:

$deactivate

2
投票

您可以使用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一步一步


2
投票

使用deactivate

(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$ 

注意,(my_env)消失了。


1
投票

我发现在Miniconda3环境中我必须运行:

conda deactivate

deactivatesource deactivate都没有为我工作。


0
投票

我使用基于zsh-autoenvautoenv

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.