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

时间:2009-06-13 14:15:37

标签: python virtualenv virtualenvwrapper

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

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

但是,如何退出所有虚拟机并再次使用我的真机?现在,我回到

的唯一方法
me@mymachine:~$ 

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

15 个答案:

答案 0 :(得分:2104)

通常,激活virtualenv会为您提供一个名为:

的shell函数
$ deactivate

让事情恢复正常。

编辑1

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

编辑2

如果您尝试离开 Anaconda 环境,则过程略有不同:运行双字命令source deactivate,因为它们使用独立脚本实现停用。 / p>

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.

答案 1 :(得分:38)

我将alias 工作日定义为与工作相反:

alias workoff='deactivate'

容易记住:

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

答案 2 :(得分:38)

$ deactivate 

如果这不起作用,请尝试

$ source deactivate

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

答案 3 :(得分:11)

激活python虚拟环境:

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

停用:

$deactivate

答案 4 :(得分:4)

由于无法通过在deactivate中查找这样的命令的常用方法来发现通过采购~/bin/activate创建的~/bin函数,因此您可能希望创建一个仅执行该函数的命令deactivate

问题在于,如果包含一个命令deactivate的脚本deactivate不在venv中意外执行,将导致无限循环。一个常见的错误。

只有在函数存在(即已通过采购deactivate创建)的情况下才执行activate,可以避免这种情况。

#!/bin/bash

declare -Ff deactivate  && deactivate

答案 5 :(得分:2)

您可以使用<form> <input type="email" id="email" placeholder="Please enter email" required> <input type="submit" class="btn" onclick="downloadWin()" value="Windows"> <input type="submit" class="btn" onclick="downloadOsx()" value="Osx"> </form> <script> function downloadWin(){ event.preventDefault(); var email = $("#email").val(); if(email != ''){ if(validateEmail(email)){ location.href='http://s/index.php?page=downloadWin&email='+email; } } } function downloadOsx(){ event.preventDefault(); var email = $("#email").val(); if(email != ''){ if(validateEmail(email)){ location.href='http://s/index.php?page=downloadOsx&email='+email; } } } </script> 来简化您使用virtualenvwrapper

的方式

安装virtualenv

virtualenvwrapper

如果您使用的是标准外壳,请在使用oh-my-zsh时打开pip install virtualenvwrapper ~/.bashrc。添加以下两行:

~/.zshrc

要激活现有的virtualenv,请使用命令workon:

export WORKON_HOME=$HOME/.virtualenvs  
source /usr/local/bin/virtualenvwrapper.sh

为了停用你的virtualenv:

$ workon myenv
(myenv)$

这是我的tutorial,如何安装virtualenv和virtualenvwrapper一步一步

答案 6 :(得分:2)

使用deactivate

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

注意,(my_env)已消失。

答案 7 :(得分:2)

使用venv的deactivate脚本提供的activate功能要求您信任正确编码的停用功能,以将所有环境变量完全重置为原来的状态之前-不仅考虑了原始激活,而且还考虑了任何开关配置其他工作可能与此同时。

可能很好,但是确实会带来一种新的,非零的风险,即事后修改环境。

但是,从技术上讲,一个进程不可能直接更改其父级的环境变量,因此我们可以使用单独的子shell来绝对确保我们的venv不会留下任何残留更改:


要激活:

$ bash --init-file PythonVenv/bin/activate

  • 这将在venv周围启动一个新的shell。您原来的bash外壳仍未修改。

要停用:

$ exit[CTRL] + [D]

  • 这将退出venv所在的整个外壳,并使您回到激活脚本对环境进行任何更改之前的原始外壳。

示例:

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

[user@computer ~]$ bash --init-file PythonVenv/bin/activate

(PythonVenv) [user@computer ~]$ echo $VIRTUAL_ENV
/home/user/PythonVenv

(PythonVenv) [user@computer ~]$ exit
exit

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

答案 8 :(得分:1)

运行 deactivate [name of your environment] 可以退出/停用 Python 环境。

以 python3.6 Windows 10 为例:

PS C:\Users\kyrlon\Desktop> py -m venv env1
PS C:\Users\kyrlon\Desktop> .\env1\Scripts\activate
(env1) PS C:\Users\kyrlon\Desktop> deactivate env1
PS C:\Users\klongwood3\Desktop> py -m venv env1

在 Linux Ubuntu 20.04 LTS 桌面上使用 python3.9 的示例:

kyrlon@pc1:~$ python3 -m venv venv1
kyrlon@pc1:~$ source venv1/bin/activate
(venv1) kyrlon@pc1:~$ deactivate venv1
kyrlon@pc1:~$

答案 9 :(得分:0)

我使用基于zsh-autoenvautoenv

  自动

zsh-autoenv   源(已知/已列入白名单).autoenv.zsh文件,通常用于   项目根目录。它处理&#34;进入&#34;并离开&#34;事件,   嵌套和存储变量(覆盖和恢复)。

以下是一个例子:

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

答案 10 :(得分:0)

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

video {
        display: block;
        margin: auto;
}

conda deactivate deactivate都不适合我。

答案 11 :(得分:0)

这非常简单,您可以停用虚拟环境

  • 如果使用 Anaconda -使用conda deactivate
  • 如果不使用 Anaconda -请使用source deactivate

答案 12 :(得分:0)

对于我的特殊情况,我转到工作目录

CD /myworkingdirectory

然后我像这样激活我的环境:

my-env/scripts/activate

从同一个工作文件夹 (/myworkingdirectory) 停用,我尝试了这个,但它什么也没做:

my-env/scripts/deactivate

这确实有效:

deactivate

答案 13 :(得分:0)

要激活 Python 虚拟环境:

source venv/bin/activate

注意:这里的“venv”是您的 virtualenvironment 文件夹名称

停用:

`deactivate` or `source deactivate`

答案 14 :(得分:-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%确定它是否按预期工作,我可能完全错过了一些东西。