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

How do I prevent Conda from activating the base environment by default?

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

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

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

第一次从提示符处执行conda init时,Conda将以下内容添加到我的.bash_profile中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# >>> 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环境。

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

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

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

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

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

为了澄清起见,我不是要从我的$PS1中删除(base),而是要我在打开终端会话时不要激活Conda。


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

1
conda config --set auto_activate_base false

第一次运行它时,它将在主目录中创建一个./condarc,并使用该设置覆盖默认设置。

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


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

1
conda deactivate

就在下面

1
# <<< conda initialize <<<


所以最后我发现,如果我像这样注释掉Conda初始化块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# >>> 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可用于激活环境,但默认情况下不会激活。


conda 4.6之后,有3种方法可以实现此目的。 (最后一种方法具有最高优先级。)

  • 使用子命令conda config更改设置。

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

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

    1
    CONDA_AUTO_ACTIVATE_BASE=false

    To convert from the condarc file-based configuration parameter name to the environment variable parameter name, make the name all uppercase and prepend CONDA_. For example, conda’s always_yes configuration parameter can be specified using a CONDA_ALWAYS_YES environment variable.

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

  • 参考文献

    • 适用于高级用户的Conda配置引擎
    • 使用.condarc conda配置文件
    • conda config --describe
    • Conda 4.6版本

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

    1
    conda config --set auto_activate_base false

    要激活conda基本环境:

    1
    conda activate


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

    步骤1:vim /anaconda/bin/activate,它显示:

    1
    2
    3
    4
    5
    6
     #!/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"$@"

    步骤2:注释掉最后一行:# conda activate"$@"