如何防止 Conda 默认激活基础环境?
Posted
技术标签:
【中文标题】如何防止 Conda 默认激活基础环境?【英文标题】:How do I prevent Conda from activating the base environment by default? 【发布时间】:2019-06-23 01:29:39 【问题描述】:我最近在我的 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 在我打开终端会话时不要激活 base。
【问题讨论】:
您是否尝试过使用source activate
代替?又名“老派方法”
这个问题非常有用,应该在 anaconda 文档 IMO 中
@fabiob 接受的答案中的一些 cmets 解释了在哪里可以找到信息。在我看来,它应该是您在本教程中学习的第一件事。初学者不应该为这样一个简单且显然非常常见的请求而翻阅文档。
【参考方案1】:
所以最后我发现如果我像这样注释掉 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
。【参考方案2】:
答案取决于您安装的conda
的版本。 conda >= 4.4的版本,初始化后的conda环境deactivate
应该就够了,所以添加
conda deactivate
正下方
# <<< conda initialize <<<
【讨论】:
这应该可行,并且应该概括。但我更喜欢一种能够整理我的 bash 配置文件的解决方案,而不是添加它。 但是如果您手动编辑该部分,那么 conda 将无法再自动管理它。我建议不要管它。 但是请注意,这意味着在每个终端会话中您激活一个 Conda 环境,然后停用一个您不会注意到的 Conda 环境,但这与阻止默认激活不同。跨度> 这行不通,打开一个新的 shell,在 .zshrc 中附加 conda 代码,我每次都会被推入(基础)环境。 正如梅林所说,开始新的终端导致再次拥有(基地)【参考方案3】:我有 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),它似乎都可以工作【参考方案4】:
这可能是最近 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 "$@"
【讨论】:
【参考方案5】:在终端中禁用 conda 基础环境的自动激活:
conda config --set auto_activate_base false
激活 conda 基础环境:
conda activate
【讨论】:
嘿,这个答案是正确的,但实际上与接受的答案相同。我的问题与激活公寓无关,这是您在阅读教程时学到的第一件事。考虑添加一些以前的答案中尚未提供的有用的相关信息。 我正在寻找禁用自动后如何手动激活。谢谢! 这有帮助。我也在寻找如何在禁用自动激活后手动激活 conda。【参考方案6】:在conda
4.6 之后有 3 种方法可以实现此目的。 (最后一个方法的优先级最高。)
使用子命令conda config
更改设置。
conda config --set auto_activate_base false
其实前面的conda config
子命令就是修改配置文件.condarc
。我们可以直接修改.condarc
。将以下内容添加到你家目录下的.condarc
,
# auto_activate_base (bool)
# Automatically activate the base environment during shell
# initialization. for `conda init`
auto_activate_base: false
在 shell 的初始化文件中设置环境变量CONDA_AUTO_ACTIVATE_BASE
。 (.bashrc
用于 bash,.zshrc
用于 zsh)
CONDA_AUTO_ACTIVATE_BASE=false
要将
condarc
基于文件的配置参数名称转换为环境变量参数名称,请将名称全部设为大写和前置CONDA_
。例如,可以使用CONDA_ALWAYS_YES
环境变量指定 conda 的always_yes
配置参数。
环境设置优先高于.condarc
文件中的相应设置。
参考文献
The Conda Configuration Engine for Power Users Using the .condarc conda configuration fileconda config --describe
Conda 4.6 Release
【讨论】:
很好的答案。我在脚本中使用 env var 方法来控制这种行为,如下所示:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
我必须将 export CONDA_AUTO_ACTIVATE_BASE=false
添加到我的 .zshrc 才能使选项 3 起作用。
我尝试了这个线程中的所有内容,但在我关闭并重新打开 VS Code 之前似乎没有任何效果。更改设置后不要忘记重新启动应用程序!【参考方案7】:
我遇到了同样的问题。最初我删除了 .bash_profile 但这不是正确的方法。安装 anaconda 后,它会清楚地显示此问题的说明。 Please check the image for solution provided by Anaconda
【讨论】:
【参考方案8】:如果您手动管理您的.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
最后,如果您在多个系统之间共享您的 bashrc,而 conda 可能安装在不同的路径中,您可以执行以下操作:
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
生成的代码相比,现在的长度与conda init
生成的代码相似,但仍将执行得更快,并且对于在不同系统之间同步.bashrc
的用户来说,可能比conda init
工作得更好。
【讨论】:
如果你想让你的 bashrc 保持简单,你可以删除所有 conda init 生成的混乱,只保留一行 上面写着 的“混乱”! !此块中的内容由 'conda init' 管理! ?这样做而不是仅仅更改适当的 Conda 设置/配置选项有什么好处? 优点是从 bashrc 中减少了 11 行不需要的代码,并通过避免在不需要时调用 conda 来缩短 shell 启动时间(conda 非常慢,并且可以在第一次启动时轻松添加第二个或更多只是为了从另一个配置文件中解析一个值,说它无论如何都不应该被激活)。此外,这使您的 bashrc 更易于阅读,这可能与某些用户相关。 这样做,你会破坏 conda init 自动管理它,修改这个部分是个坏主意 这个答案的重点是不要使用conda init
,因为它生成的代码很慢,并且不允许您在不同机器之间同步您的.bashrc
。 ..【参考方案9】:
没有指出的一件事是,如果您只想从 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 环境是一团糟。以上是关于如何防止 Conda 默认激活基础环境?的主要内容,如果未能解决你的问题,请参考以下文章