我最近在我的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用户。
需要明确的是,我并不是要求从我的$PS1中删除(base),我是要求Conda在我打开终端会话时不激活base。
在conda 4.6之后,有3种方法可以实现这一点。(最后一种方法优先级最高。)
Use sub-command conda config to change the setting.
conda config --set auto_activate_base false
In fact, the former conda config sub-command is changing configuration file .condarc. We can modify .condarc directly. Add following content into .condarc under your home directory,
# auto_activate_base (bool)
# Automatically activate the base environment during shell
# initialization. for `conda init`
auto_activate_base: false
Set environment variable CONDA_AUTO_ACTIVATE_BASE in the shell's init file. (.bashrc for bash, .zshrc for zsh)
export 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.
The environment settings take precedence over corresponding settings in .condarc file.
参考文献
用于高级用户的Conda配置引擎
使用condarc conda配置文件
Conda config——描述
Conda 4.6发布
如果你手动管理你的.bashrc,并喜欢保持简单,你真正需要的是:
. "$HOME/anaconda2/etc/profile.d/conda.sh"
请参阅在shell中启用conda的建议更改。
这将使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生成的代码相比,这段代码的长度是相似的,但仍然会执行得更快,对于在不同系统之间同步.bashrc的用户来说,这段代码可能比conda init更好。
对于conda 4.12.0(在WOS下),下面的工作(其中所有之前的答案-包括这些-没有做的把戏):
在你的activate.bat文件中(我的在~/miniconda3/Scripts/activate.bat),更改行:
@REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" activate %*
into
@REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" deactivate
这个行更改/修改在(激活.bat文件的)section中不起作用:
@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)文件;因此,必须根据需要/更新多次修改上面的行。要我说,这也不是什么大问题。