2100

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

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

如何退出所有虚拟环境并再次在我的系统环境中工作?现在,我返回的唯一方法me@mymachine:~$是退出 shell 并开始一个新的。这有点烦人。是否有一个命令可以处理“无”,如果有,它是什么?如果这样的命令不存在,我将如何创建它?

4

16 回答 16

3384

通常,激活 virtualenv 会给你一个名为的 shell 函数:

$ deactivate

这使事情恢复正常。

我刚刚再次专门查看了 的代码virtualenvwrapper,并且,是的,它也支持deactivate作为逃避所有 virtualenvs 的方式。

如果您尝试离开Anaconda环境,该命令取决于您的conda. 最近的版本(如 4.6)conda直接在你的 shell 中安装一个函数,在这种情况下你运行:

conda deactivate

较旧的 conda 版本改为使用独立脚本实现停用:

source deactivate
于 2009-06-13T14:31:00.867 回答
83

采用:

$ deactivate 

如果这不起作用,请尝试

$ source deactivate

任何知道Bashsource是如何工作的人都会认为这很奇怪,但是一些围绕 virtualenv 的包装器/工作流将它实现为source activate. 你的旅费可能会改变。

于 2015-04-12T06:41:08.083 回答
59

我定义了一个别名workoff,作为workon的反义词:

alias workoff='deactivate'

很容易记住:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
于 2015-01-14T16:23:13.750 回答
28

要激活 Python 虚拟环境:

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

要停用:

$deactivate
于 2015-11-26T07:06:58.170 回答
23

要激活 Python 虚拟环境:

source venv/bin/activate

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

停用:

deactivate

或者

source deactivate
于 2021-07-03T06:05:12.103 回答
10

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

conda deactivate

既不为我工作,deactivate也不source deactivate为我工作。

于 2019-04-23T18:49:25.917 回答
8

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

于 2016-09-01T05:13:21.877 回答
5

if anyone is trying to figure out how to deactivate it if deactivate or source deactivate does not work then type:

deactivate <virtual environment name>

worked like a charm for me!

于 2021-09-05T11:47:41.577 回答
4

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

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

这可以通过仅deactivate在函数存在时执行(即由 sourcing 创建activate)来避免。

#!/bin/bash

declare -Ff deactivate  && deactivate
于 2019-08-03T21:33:54.947 回答
4

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

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

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


激活:

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

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

要停用:

$ exit[CTRL]+[D]

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

例子:

[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!
于 2020-02-18T22:48:29.550 回答
3

使用deactivate.

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

注意,(my_env)没了。

于 2017-09-03T06:43:40.007 回答
2

我使用基于autoenv 的zsh- 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目录时,虚拟环境会自动退出。

"Development tree utiles"只是一个名字……没有隐藏的意思与这里的光明会联系起来。

于 2017-02-14T10:50:19.363 回答
2

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

CD /myworkingdirectory

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

my-env/scripts/activate

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

my-env/scripts/deactivate

这确实有效:

deactivate
于 2021-03-18T22:11:12.420 回答
2

Runningdeactivate [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:~$
于 2021-07-22T18:21:15.600 回答
0

I my case, I was able to activate virtual environment using env-name\scripts\activate and deactivate it using deactivate. However, after running update on my windows PC deactivate was no longer recognized as an internal or external command. What I used from that moment onward is env-name\scripts\deactivate and that solved the problem.

于 2021-12-30T11:42:22.107 回答
-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

# 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% 确定它是否按预期工作。我可能完全错过了一些东西。

于 2014-12-11T18:18:42.107 回答