我最近在我的 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
?又名“老派方法”
我有 conda 4.6 和 conda 添加的类似代码块。就我而言,有一个 conda 配置设置来禁用自动基本激活:
conda config --set auto_activate_base false
第一次运行它时,它会在您的主目录中创建一个 .condarc
,并使用该设置覆盖默认设置。
这不会使您的 .bash_profile
变得杂乱无章,但它是一种更简洁的解决方案,无需手动编辑 conda 管理的部分。
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 版本
export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
export CONDA_AUTO_ACTIVATE_BASE=false
添加到我的 .zshrc 才能使选项 3 起作用。
export CONDA_AUTO_ACTIVATE_BASE=false
并没有什么区别
答案在一定程度上取决于您安装的 conda
版本。对于 conda >= 4.4 的版本,初始化后的 conda 环境 deactivate
应该足够了,所以添加
conda deactivate
正下方
# <<< conda initialize <<<
要在终端中禁用 conda 基础环境的自动激活:
conda config --set auto_activate_base false
激活 conda 基础环境:
conda activate
所以最后我发现如果我像这样注释掉 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 可用于激活环境,但默认情况下不会激活。
rc
文件中的混乱?我也会对此感兴趣,能够像对待其他环境一样对待 conda,而不是把事情弄得乱七八糟
conda activate
时,Conda 不能即时(即临时)更改 shell 设置,而不是强迫我永久更改我的 shell 环境?我的意思是,添加到 $PATH
的路径没有问题,但我当然不希望 Conda 更改我的 $PS1
。
对于 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) 文件;所以必须根据需要/更新多次修改上述行。如果你问我,这并不会破坏交易。
如果您手动管理 .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
工作得更好。
conda init
,因为它生成的代码很慢,并且不允许您在不同机器之间同步您的 .bashrc
...
这可能是最近 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 "$@"
没有指出的一件事是,如果您只想从 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
我遇到了同样的问题。最初我删除了 .bash_profile 但这不是正确的方法。安装 anaconda 后,它会清楚地显示此问题的说明。 Please check the image for solution provided by Anaconda
不定期副业成功案例分享
conda config --describe
在配置选项中找到它的描述。在代码库中搜索“auto_activate_base”似乎显示 Conda v4.6.0 是介绍。conda config --set auto_activate_base false
感谢您安装 Anaconda3!