更新conda后如何从终端提示中删除(base)

How to remove (base) from terminal prompt after updating conda

更新 miniconda3 后,每当我打开终端时,它都会在我的用户名和主机前面显示“(base)”。

在这个回答中 post https://askubuntu.com/a/1113206/315699 建议使用

conda config --set changeps1 False

删除它。

但这会删除任何 conda 环境的指示。我只想为基本的删除它,这样我就可以保持它始终处于活动状态并可以访问它的 python 和已安装的软件包,而不必总是看到这个(基本)占用 space。

使用 base env 的激活钩子

对于每个环境,etc/conda/activate.d 目录中的任何脚本都将被执行 post-激活(同样 etc/conda/deactivate.d 停用脚本)。如果您添加一个脚本来删除 (base),类似于 ,您将获得您想要的行为。

我必须为 base 创建这个目录,它只是 Anaconda/Miniconda 文件夹的根目录。例如,

mkdir -p miniconda3/etc/conda/activate.d

然后在其中创建了一个简单的文件(例如,remove_base_ps1.sh),只有一行:

PS1="$(echo "$PS1" | sed 's/(base) //') "

如果您使用的是 zsh,请改用它。

PROMPT=$(echo $PROMPT | sed 's/(base) //')

启动新的 shell 然后不显示 (base),停用嵌套环境也会处理 PS1 更改。

注意:如果要保留结尾空格,则必须在 $PS1 周围添加引号。

您可以向您的 .bashrc 添加命令以从 PS1:

中删除“(base)”字符串
PS1=$(echo $PS1 | sed 's/(base)//')

那是因为conda的基础环境在启动时被激活了。

要将 auto_activate_base 参数设置为 false,请键入:

conda config --set auto_activate_base false


2021/09/09 编辑:

如果您面临与 OP 完全相同的情况,即您正在使用 conda 管理环境,并希望使(基本)环境看起来与终端中的系统环境没有区别,请查看@merv 的答案程序。请注意,提示字符串存储在某个特殊变量中,具体取决于您使用的 shell,因此如果它对您不起作用,请检查您的 shell 的文档。

如果你想使用系统环境而不使用conda,我的原答案是适合你的解决方案。

感谢@merv 和@Neinstein 在评论中指出。

默认情况下,安装anaconda时auto_activate_base设置为True。 要检查这一点,运行:

$ conda config --show | grep auto_activate_base
auto_activate_base: True

设置False

conda config --set auto_activate_base False

反之亦然。

注意,如果changeps1保持False,它会完全隐藏(env),如果你想只在激活时显示(env),你可以将 changeps1 设置为 True:

conda config --set changeps1 True

Setting changeps1 to False will hide (env) even if the env is activated and will keep hiding (base) even after auto_activate_base is set to True.

使用 conda 和 vscode 时。如果您有一个虚拟环境,conda 会激活您项目中的虚拟环境,如果没有,conda 会 vscode 为您创建一个名为 base 的虚拟环境。

要停用它,请使用:

conda deactivate

如果您是 macOS 用户并且最近遇到过此类问题。这是解决方案。只需打开终端然后输入..

conda deactivate

这个解决方案对我有用。和以前一样,我用 anaconda python.

尝试了一些东西

对我来说,有效的是:

conda config --set changeps1 false 

在我的 macOS Catalina 安装中,我只是 运行 conda config --set env_prompt ""。那为我删除了它。

简单的注释掉~/.bashrc中的所有行,除了环境变量:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
#__conda_setup="$('/home/<user>/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
#if [ $? -eq 0 ]; then
#    eval "$__conda_setup"
#else
#    if [ -f "/home/<user>/anaconda3/etc/profile.d/conda.sh" ]; then
#        . "/home/<user>/anaconda3/etc/profile.d/conda.sh"
#    else
        export PATH="/home/<user>/anaconda3/bin:$PATH"
#    fi
#fi
#unset __conda_setup
# <<< conda initialize <<<

在 Debian 系统上,在

之后

conda config --set auto_activate_base false

不要忘记为了在不重新加载 gnome 的情况下在终端中发生效果

bash --login

并验证标志的状态

conda config --show | grep auto_activate_base

如果您正在使用 Linux 的任何 destro,此命令将适用于您,

conda config --set auto_activate_base false

conda deactivate

可能是源码激活的原因

我在 flask 服务器中执行此操作时遇到了类似的问题,我激活并忘记停用虚拟环境。

然后转到虚拟环境处于活动状态的文件夹并键入

source deactivate

对于 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 %*

进入

@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) 文件;所以必须修改以上行 needed/updated 次。如果你问我的话,deal-breaker 并不多。