如何离开/退出/停用python virtualenv?

Apr*_*che 1461 python virtualenv virtualenvwrapper

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

me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$ 
Run Code Online (Sandbox Code Playgroud)

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

me@mymachine:~$ 
Run Code Online (Sandbox Code Playgroud)

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

Bra*_*des 2343

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

$ deactivate
Run Code Online (Sandbox Code Playgroud)

这让事情恢复正常.

编辑1

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

编辑2

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

conda deactivate
Run Code Online (Sandbox Code Playgroud)

  • "deactivate"命令不是二进制文件,也不是"源"的脚本; 它是一个shell别名,可以通过"activate"脚本在当前shell中动态定义. (112认同)
  • 猜猜调用"workon"里面的实际virtualenv命令是什么?...(扰流板警告)......(扰流板警告)......(扰流板警告)......(扰流板警告)......激活! (14认同)
  • @Apreche在此期间(差不多四年后),这似乎已经[添加](http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html#deactivate)到文档中. (6认同)
  • 如果被称为"workoff"或"unworkon",会更加直观.或者如果"workon"被称为"激活".谢天谢地说别名. (6认同)
  • @kkurian - 你应该建议在'virtualenvwrapper`的问题跟踪器上,也许Doug Hellmann会考虑它!请注意,对于那些可能会在以后阅读这些评论的人来说,`workon`不是**本地`virtualenv`命令(这是原始问题的命令),而是`virtualenvwrapper`命令! (3认同)
  • 关于简单命令如何耗费大量时间来解决它们的典型示例.太棒了! (3认同)
  • @BrandonRhodes确切地说,它不是别名,而是函数 (2认同)
  • 新一代“vim 问题”。 (2认同)
  • 这是多么该死的做事方式啊!为什么 Python 决定“deactivate”这个词只属于它? (2认同)

Bob*_*ein 47

我将别名 workoff定义为workon的反义词:

alias workoff='deactivate'
Run Code Online (Sandbox Code Playgroud)

容易记住:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个别名.让我想起了空手道小子(蜡像;蜡像) (19认同)

小智 45

$ deactivate 
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试

$ source deactivate
Run Code Online (Sandbox Code Playgroud)

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

  • 这不值得投票.请参阅编辑所选响应:source deactivate用于anaconda环境. (7认同)
  • `deactivate`是一个在你输出`activate`文件时创建的函数.你建议做`source deactivate`根本没有意义,因为没有名为`deactivate`的文件 (6认同)
  • 它"值得"不符合SO**答案**质量标准.这更像是评论而不是答案.但是,由于海报的79声誉,我们应该很好并提供良好的反馈. (2认同)

kyr*_*lon 32

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

PowerShell 中 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\kyrlon\Desktop> py -m venv env1
Run Code Online (Sandbox Code Playgroud)

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:~$
Run Code Online (Sandbox Code Playgroud)


Raj*_*jan 24

在 MacOs ventura 中 -

激活 -

 sudo chmod -R 755  ./venv/bin
 source venv/bin/activate    
Run Code Online (Sandbox Code Playgroud)

停用 -

deactivate
Run Code Online (Sandbox Code Playgroud)


Ami*_*jan 12

激活python虚拟环境:

$cd ~/python-venv/
$./bin/activate
Run Code Online (Sandbox Code Playgroud)

停用:

$deactivate
Run Code Online (Sandbox Code Playgroud)

  • 在OS X10.11.1上的终端中,我似乎必须使用:`$ source activate` (3认同)
  • "source"与"."相同.command ..或者可以用来源文件 (3认同)

Nic*_*aid 11

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

CD /myworkingdirectory
Run Code Online (Sandbox Code Playgroud)

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

my-env/scripts/activate
Run Code Online (Sandbox Code Playgroud)

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

my-env/scripts/deactivate
Run Code Online (Sandbox Code Playgroud)

这确实有效:

deactivate
Run Code Online (Sandbox Code Playgroud)


Wil*_*hen 10

使用deactivatevenvactivate脚本提供的功能要求您相信停用函数已正确编码,以将所有环境变量干净地重置回\xe2\x80\x94 之前的状态,不仅考虑到原始激活,还考虑到任何开关配置或您在此期间可能完成的其他工作。

\n\n

这可能没问题,但它确实会带来一种新的、非零的风险,即事后修改环境。

\n\n

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

\n\n
\n\n

激活:

\n\n

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

\n\n
    \n
  • 这将在venv. 您的原始bash外壳保持不变。
  • \n
\n\n

停用:

\n\n

$ exit[CTRL]+[D]

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

例子:

\n\n
[user@computer ~]$ echo $VIRTUAL_ENV\nNo virtualenv!\n\n[user@computer ~]$ bash --init-file PythonVenv/bin/activate\n\n(PythonVenv) [user@computer ~]$ echo $VIRTUAL_ENV\n/home/user/PythonVenv\n\n(PythonVenv) [user@computer ~]$ exit\nexit\n\n[user@computer ~]$ echo $VIRTUAL_ENV\nNo virtualenv!\n
Run Code Online (Sandbox Code Playgroud)\n


Cep*_*irk 9

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

conda deactivate
Run Code Online (Sandbox Code Playgroud)

deactivate没有source deactivate为我工作,也没有为我工作。

  • `deactivate` 用于 `virtualenv`,而 `source deactivate` 用于 Linux 上的旧 conda。`conda deactivate` 对于 conda envs(不是 virtualenvs)来说是一个很好的跨平台方式 (2认同)

lev*_*evi 8

您可以使用virtualenvwrapper以简化您使用virtualenv.

安装virtualenvwrapper

pip install virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)

如果您使用的是标准 shell,请打开您的~/.bashrc或者~/.zshrc如果您使用Oh My Zsh。添加这两行:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Run Code Online (Sandbox Code Playgroud)

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

$ workon myenv
(myenv)$
Run Code Online (Sandbox Code Playgroud)

为了停用您的 virtualenv:

(myenv)$ deactivate
Run Code Online (Sandbox Code Playgroud)

这是我的教程,逐步介绍如何安装 virtualenv 和 virtualenvwrapper。

  • 与内置的 virtualenv 相比,我看不到什么区别 (2认同)

小智 7

$ conda deactivate
或者
$ source deactivate
会起作用。

如果它不起作用,请尝试deactivate [name of your environment]替代。


Doc*_*ger 5

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

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

deactivate可以通过仅在函数存在时执行(即已通过 source 创建)来避免这种情况activate

#!/bin/bash

declare -Ff deactivate  && deactivate
Run Code Online (Sandbox Code Playgroud)