ChatGPT解决这个技术问题 Extra ChatGPT

如何防止 Conda 默认激活基础环境?

我最近在我的 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'.

This question(和其他类似的)很有帮助,但最终并不能回答我的问题,更适合 linux 用户。

需要明确的是,我不是要求从我的 $PS1 中删除 (base) 我是要求 Conda 在我打开终端会话时不要激活基础。

您是否尝试改用 source activate?又名“老派方法”
这个问题非常有用,应该在 anaconda 文档 IMO 中
@fabiob 已接受答案中的一些评论解释了在哪里可以找到信息。在我看来,这应该是您在本教程中学习的第一件事。初学者不应该为这样一个简单且显然非常常见的请求而翻阅文档。

m
mareoraft

我有 conda 4.6 和 conda 添加的类似代码块。就我而言,有一个 conda 配置设置来禁用自动基本激活:

conda config --set auto_activate_base false

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

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


伟大的。你从哪里知道设置的?因为我不记得在介绍性教程的任何地方读过它?
@DryLabRebel 没有在任何发行说明中提及,但您可以通过运行 conda config --describe 在配置选项中找到它的描述。在代码库中搜索“auto_activate_base”似乎显示 Conda v4.6.0 是介绍。
哎呀,错过了你的问题。对不起! @merv 是正确的,因为它在配置中。我正在寻找针对不同问题的不同选项,并看到了该选项。
@DryLabRebel 安装程序初始化 Anaconda 后,它会打印出:如果您希望 conda 的基础环境在启动时不被激活,请将 auto_activate_base 参数设置为 false:conda config --set auto_activate_base false 感谢您安装 Anaconda3!
非常感谢这个答案。 IMO 这应该是默认行为。对于那些可能想知道是否应该遵循链接的 Linux 问题的 Linux 用户,只需遵循此问题,无论操作系统如何,它似乎都可以工作(此处为 Linux Mint)
S
Simba

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

使用子命令 conda config 更改设置。 conda config --set auto_activate_base false 其实之前的 conda config 子命令就是修改配置文件 .condarc。我们可以直接修改.condarc。在你的主目录下的.condarc 中添加以下内容, # auto_activate_base (bool) # 在shell 初始化期间自动激活基础环境。 for `conda init` auto_activate_base: false 在 shell 的初始化文件中设置环境变量 CONDA_AUTO_ACTIVATE_BASE。 (.bashrc 用于 bash,.zshrc 用于 zsh) export CONDA_AUTO_ACTIVATE_BASE=false 要将基于 condarc 文件的配置参数名称转换为环境变量参数名称,请将名称全部大写并添加 CONDA_。例如,可以使用 CONDA_ALWAYS_YES 环境变量指定 conda 的 always_yes 配置参数。环境设置优先于 .condarc 文件中的相应设置。

参考

面向高级用户的 Conda 配置引擎

使用 .condarc conda 配置文件

康达配置——描述

康达 4.6 版本


很好的答案。我在脚本中使用 env var 方法来控制这种行为,如下所示:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
我必须将 export CONDA_AUTO_ACTIVATE_BASE=false 添加到我的 .zshrc 才能使选项 3 起作用。
我尝试了这个线程中的所有内容,但在我关闭并重新打开 VS Code 之前似乎没有任何效果。更改设置后不要忘记重新启动应用程序!
我的 .bashrc 中有 export CONDA_AUTO_ACTIVATE_BASE=false 并没有什么区别
d
darthbith

答案在一定程度上取决于您安装的 conda 版本。对于 conda >= 4.4 的版本,初始化后的 conda 环境 deactivate 应该足够了,所以添加

conda deactivate

正下方

# <<< conda initialize <<<

这应该有效,并且应该概括。但我更喜欢一种能够整理我的 bash 配置文件的解决方案,而不是添加它。
但是如果您手动编辑该部分,那么 conda 将无法再自动管理它。我建议不要管它。
但是请注意,这意味着在每个终端会话中您激活一个 Conda 环境,然后停用一个您不会注意到的 Conda 环境,但这与阻止默认激活不同。
这不起作用,在 .zshrc 中打开一个带有附加 conda 代码的新 shell,我每次都会被推入(基本)环境。
正如梅林所说,开始新的终端导致再次拥有(基地)
k
kurianmat

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

conda config --set auto_activate_base false

激活 conda 基础环境:

conda activate

嘿,这个答案是正确的,但实际上与接受的答案相同。我的问题与激活公寓无关,这是您在阅读教程时学到的第一件事。考虑添加一些以前的答案中尚未提供的有用的相关信息。
我正在寻找禁用自动后如何手动激活。谢谢!
这有帮助。我也在寻找如何在禁用自动激活后手动激活 conda。
D
DryLabRebel

所以最后我发现如果我像这样注释掉 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 可用于激活环境,但默认情况下不会激活。


不幸的是,如果块内容由其他脚本管理,如代码块开头所述,此更改可能会被其他脚本替换或回滚。
@DryLabRebel - 你有没有找到一种强大的方法来消除 rc 文件中的混乱?我也会对此感兴趣,能够像对待其他环境一样对待 conda,而不是把事情弄得乱七八糟
@baxx 不,我没有。如果您想要最新版本的 conda,并且希望它工作,那么您真的需要初始化命令。
好的,干杯,我觉得如果您只是将 conda env 安装在项目目录中,而不是在集中位置,则可能有一种解决方法。还不太确定
以下是我不明白的:为什么当我调用 conda activate 时,Conda 不能即时(即临时)更改 shell 设置,而不是强迫我永久更改我的 shell 环境?我的意思是,添加到 $PATH 的路径没有问题,但我当然不希望 Conda 更改我的 $PS1
M
Manuel F

对于 conda 4.12.0(在 WOS 下),以下工作(其中所有以前的答案 - these 包括 - 没有做到这一点):
在您的 activate.bat 文件中(我的文件位于 ~/miniconda3 /Scripts/activate.bat),更改行:

@REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" activate %*

进入

@REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" deactivate

此行 chage/modification 在(activate.bat 文件的)部分中不起作用:

@if "%_args1_first%"=="+" if NOT "%_args1_last%"=="+" (
        @CALL "%~dp0..\condabin\conda.bat" activate
        @GOTO :End
)

可能是因为这取决于您的 miniconda3(Anaconda Prompt)可执行文件的设置方式:%windir%\System32\cmd.exe "/K" some-path-to\miniconda3\Scripts\activate.bat some-path-to\miniconda3(在我的情况下)。

警告:更新 conda 会覆盖此 (activate.bat) 文件;所以必须根据需要/更新多次修改上述行。如果你问我,这并不会破坏交易。


c
coldfix

如果您手动管理 .bashrc 并希望保持简单,那么您真正需要的是:

. "$HOME/anaconda2/etc/profile.d/conda.sh"

请参阅Recommended change to enable conda in your shell

这将使 conda 命令可用,而无需激活基本环境(也不读取您的 conda 配置)。

请注意,这(当然)与使用 conda init 管理 conda 安装不兼容,但除此之外,没有什么不好的地方。与 conda init 生成的代码相比,您甚至可能会体验到显着的加速,因为此解决方案避免调用 conda 来解析您的配置文件是否启用基本环境等。

如果在可能未安装 conda 的多个系统上使用相同的 bashrc,最好也保留 if/fi 行以避免错误消息:

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

最后,如果您在 conda 可能安装在不同路径的多个系统之间共享您的 bashrc,您可以执行以下操作:

for CONDA_PREFIX in \
   "$HOME/anaconda2" \
   "$HOME/miniconda3" \
   "/opt/miniconda3" \
do
    if [ -f "$CONDA_PREFIX/etc/profile.d/conda.sh" ]; then
        . "$CONDA_PREFIX/etc/profile.d/conda.sh"
        break
    fi
done

当然,与 conda init 生成的代码相比,这现在的长度相似,但仍将执行得更快,并且对于在不同系统之间同步其 .bashrc 的用户来说,可能比 conda init 工作得更好。


如果你想让你的 bashrc 简单,你可以删除所有 conda init 生成的混乱,只保留一行“混乱”,上面写着 !!此块中的内容由“conda init”管理! ?这样做而不是仅仅更改适当的 Conda 设置/配置选项有什么好处?
优点是从 bashrc 中删除了 11 行不需要的代码,并通过在不需要时避免调用 conda 来缩短 shell 启动时间(conda 非常慢,并且可以在第一次启动时轻松添加第二个或更多,只是为了解析来自另一个配置的值文件说它无论如何都不应该被激活)。此外,这使您的 bashrc 更易于阅读,这可能与某些用户相关。
通过这样做,您将破坏自动管理它的 conda init,修改此部分是一个坏主意
这个答案的重点是不要使用 conda init,因为它生成的代码很慢,并且不允许您在不同机器之间同步您的 .bashrc...
C
CcMango

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

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 "$@"

step2:注释掉最后一行:# conda activate "$@"


T
Thorsten

没有指出的一件事是,如果您只想从 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

不,有很多不同:当 conda 基础环境被激活时,它的 bin 目录(包括 ao python、pip 和许多较小的实用程序)被添加到 PATH 的前面,覆盖任何默认值系统。
借调。 Anaconda 的默认行为令人沮丧。我出于某种原因使用/针对我的系统 python 安装进行修改和开发(我的许多 python 脚本是系统的一部分,我希望它们可供所有用户使用,并且我想针对系统 python 测试它们,而不是 conda )。默认情况下插入 Anaconda 环境是一团糟。
M
Manideep Pullalachervu

我遇到了同样的问题。最初我删除了 .bash_profile 但这不是正确的方法。安装 anaconda 后,它会清楚地显示此问题的说明。 Please check the image for solution provided by Anaconda