默认情况下,如何防止Conda激活基本环境?


234

我最近在Mac上安装了anaconda2。默认情况下,将Conda配置为在打开新的终端会话时激活基本环境。

我想访问Conda命令(即,我想将Conda的路径添加到我的$ PATH中,初始化时Conda会这样做,所以就可以了)。

但是我通常不使用python编程,并且我不希望Conda默认激活环境。

首次conda init从提示执行时,Conda将以下内容添加到我的.bash_profile

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else
    export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
unset __conda_setup
# <<< conda initialize <<<

如果我注释掉整个块,则无法激活任何Conda环境。

我试图注释掉整个区块,除了

export PATH="/Users/geoff/anaconda2/bin:$PATH"

但是,当我开始一个新的会话并尝试激活环境时,我收到了以下错误消息:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

这个问题(以及其他类似的问题)很有帮助,但最终并不能回答我的问题,更适合Linux用户。

为了澄清起见,我并没有要求(base)从我$PS1要求Conda打开终端会话时不激活基础功能中删除。


您是否尝试过使用source activate?又名“老式的方法”
耶拿

Answers:


481

我有conda 4.6,其中包含由conda添加的类似代码块。就我而言,有一个conda配置设置可以禁用自动基本激活:

conda config --set auto_activate_base false

首次运行时,它将./condarc在您的主目录中创建一个具有该设置的设置,以覆盖默认设置。

这不会使您杂乱无章,.bash_profile但这是一个更干净的解决方案,无需手动编辑conda管理的部分。


1
大。您在哪里找到有关设置的信息?因为我不记得在入门教程的任何地方都阅读过它?
DryLabRebel '19

6
@DryLabRebel在任何发行说明中均未提及,但是您可以通过运行在配置选项中找到它conda config --describe。在代码库中搜索“ auto_activate_base”似乎表明Conda v4.6.0是介绍。
Merv

2
糟糕,错过了您的问题。抱歉! @merv是正确的,因为它在配置中。我针对不同的问题寻找不同的选项,并看到了该选项。
jieong

5
@DryLabRebel安装程序初始化Anaconda之后,它会打印出:如果您不希望在启动时激活conda的基本环境,请将auto_activate_base参数设置为false:conda config --set auto_activate_base false感谢您安装Anaconda3!
致远

5
非常感谢您的回答。IMO这应该是默认行为。对于那些使用Linux的人可能想知道是否应该遵循链接的Linux问题,只需遵循此步骤,无论使用哪种操作系统,它似乎都可以工作(此处为Linux Mint)
Kamel

22

答案取决于conda您所安装的版本。对于conda> = 4.4的版本,deactivate初始化后对于conda环境应该足够了,因此添加

conda deactivate

就在下面

# <<< conda initialize <<<

5
那应该起作用,并且应该概括。但是我更喜欢一个使我的bash配置文件混乱的解决方案,而不是添加它。
DryLabRebel '19

是否可以整理取决于您使用的conda版本。如果我理解正确,一旦有了conda 4.6,就只需要该__conda_setup功能,因此您可以将整个内容缩减为6行。但我认为这里没有太多整理的地方
darthbith

2
但是,如果您手动编辑该部分,则conda不能再对其进行自动管理。我建议不要管它。
darthbith,

2
这是行不通的,每次在.zshrc中使用附加的conda代码打开一个新的shell时,我都会被推送到(基本)环境中。
默林

1
完全像Merlin所说的那样,启动新的终端导致再次有了(base)
jreft56 '19

18

因此,最终我发现,如果像这样注释掉Conda初始化块:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
# __conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
    # eval "$__conda_setup"
# else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else
    export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
# unset __conda_setup
# <<< conda initialize <<<

正是我想要的。也就是说,如果需要,可以使用Conda激活环境,但默认情况下不激活。


5
不幸的是,如果块内容是由其他脚本管理的(如代码块开头所述),则此更改可能会被其他脚本替换或回滚。
Kukanani

@DryLabRebel-您是否找到了一种健壮的方法来消除rc文件中的混乱情况?我也会对此感兴趣,能够像对待其他环境一样对待conda,而不是使事情变得混乱
baxx

@baxx不,我没有。如果您想要最新版本的conda,并且希望它能正常工作,那么您确实需要初始化命令。
DryLabRebel

好的,我觉得如果您仅将conda env安装在项目目录中,而不是在集中位置,可能会有解决方法。不太确定
baxx

与使用相比,它似乎只有不足之处conda config --set auto_activate_base false,您能详细说明吗?
AMC

16

conda4.6 之后,有3种方法可以达到此目的。(最后一种方法具有最高优先级。)

  1. 使用子命令conda config来更改设置。

    conda config --set auto_activate_base false
  2. 实际上,前一个conda config子命令正在更改配置文件.condarc。我们可以.condarc直接修改。将以下内容添加到.condarc您的主目录下,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. CONDA_AUTO_ACTIVATE_BASE在shell的init文件中设置环境变量。(.bashrc对于bash,.zshrc对于zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    要将condarc基于文件的配置参数名称转换为环境变量参数名称,请将名称全部大写前置 CONDA_。例如,always_yes可以使用CONDA_ALWAYS_YES环境变量来指定conda的配置参数。

    环境设置优先.condarc文件中的相应设置。

参考资料


好答案。我在脚本中使用env var方法来控制这种行为,如下所示:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree

我必须将export CONDA_AUTO_ACTIVATE_BASE=false.zshrc 添加到选项3中才能正常工作。
normanius

9

要在终端中禁用conda基本环境的自动激活:

conda config --set auto_activate_base false

激活conda基本环境:

conda activate

3
嘿,这个答案是正确的,但实际上与接受的答案相同。我的问题与激活公寓无关,这是您在学习教程时首先学到的东西之一。考虑添加一些以前的答案中尚未提供的有用的相关信息。
DryLabRebel

2
我一直在寻找禁用自动后如何手动激活。谢谢!
eigil,

这有帮助。我也在寻找禁用自动激活后如何手动激活conda的方法。
克里斯·恩朱古纳

1

尚未指出的一件事是,如果您只想从Conda(Python)的脚本目录中运行应用程序(如@DryLabRebel想要的那样),则没有活动的环境与激活基本环境之间几乎没有区别。 )。

您可以通过conda进行安装和卸载,conda会将基本环境显示为活动状态-本质上是:

> echo $Env:CONDA_DEFAULT_ENV
> conda env list
# conda environments:
#
base                  *  F:\scoop\apps\miniconda3\current

> conda activate
> echo $Env:CONDA_DEFAULT_ENV
base
> conda env list
# conda environments:
#
base                  *  F:\scoop\apps\miniconda3\current

0

如果您想使bashrc保持简单,则可以删除所有conda init生成的混乱情况,并仅保留一行:

. "/Users/geoff/anaconda2/etc/profile.d/conda.sh"

请参阅建议的更改以在shell中启用conda

这将使conda命令可用而无需激活基本环境。

如果要在未在同一路径上安装conda的其他系统上使用bashrc,则也可以保留if/ fi行,以避免出现错误消息,即:

if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
fi

如果您想使bashrc保持简单,则可以删除所有由conda init生成的杂波,并且仅保留一行 “杂波”,它表示!该块中的内容由“ conda init”管理!?这样做而不是仅更改适当的Conda设置/配置选项有什么好处?
AMC

-2

这可能是最近的蟒蛇的错误。什么对我有用:

step1:,vim /anaconda/bin/activate它显示:

 #!/bin/sh                                                                                
 _CONDA_ROOT="/anaconda"
 # Copyright (C) 2012 Anaconda, Inc
 # SPDX-License-Identifier: BSD-3-Clause
 \. "$_CONDA_ROOT/etc/profile.d/conda.sh" || return $?
 conda activate "$@"

第二步:注释掉最后一行: # conda activate "$@"


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.