如何在更新 conda 后从终端提示符中删除(基础)

Posted

技术标签:

【中文标题】如何在更新 conda 后从终端提示符中删除(基础)【英文标题】:How to remove (base) from terminal prompt after updating conda 【发布时间】:2019-08-05 21:20:57 【问题描述】:

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

在这个答案帖子https://askubuntu.com/a/1113206/315699 中建议使用

conda config --set changeps1 False

删除它。

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

【问题讨论】:

【参考方案1】:

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

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

conda config --set auto_activate_base false


于 2021 年 9 月 9 日编辑:

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

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

感谢@merv 和@Neinstein 在 cmets 中指出。

【讨论】:

OP 中的问题是,即使 base 被激活,他们也不希望 PS1 发生变化。 这就是我要找的。​​span> [[ $PS1 =~ ^\(base\) ]] && conda config --set auto_activate_base false 在(重新)安装之间持续存在。 (将其添加到 ~/.bashrc,在 Conda 部分之后) @merv 你可以通过运行这个来做到这一点:conda config --set changeps1 false 这不会使 (base) 前缀为基础环境隐藏,这使得基础环境根本不激活。 shell 将使用系统 Python,而不是 Anaconda ! 这根本不是 OP 想要的,对于没有经验的用户会造成很多问题。如果您执行conda activate,则会出现(base) conda 前缀,因为您实际加载它。这个答案有 98 多票的事实表明它是多么有害 - 98 人认为他们解决了这个问题,但实际上并没有。【参考方案2】:

在 Debian 系统上,之后

conda config --set auto_activate_base false

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

bash --login

并验证标志的状态

conda config --show | grep auto_activate_base

【讨论】:

【参考方案3】:

默认情况下,安装 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

changeps1 设置为False 将隐藏(env),即使env 已激活,也会继续隐藏(base),即使在auto_activate_base 设置为True 后也是如此。

【讨论】:

这增加了this other early answer中没有的什么? 这是在 zsh 中使用 OhMyZsh 在 macOS Catalina (10.15) 上为我工作的那个,当接受的答案没有时,可能是因为提示的完成方式与 bash 略有不同【参考方案4】:

使用base env 的激活钩子

对于每个环境,etc/conda/activate.d 目录中的任何脚本都将在激活后执行(同样etc/conda/deactivate.d 脚本用于停用)。如果你添加一个脚本来删除(base),类似于@ewindes suggestion,你会得到你想要的行为。

我必须为 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),并且停用嵌套的 envs 也会处理 PS1 的更改。

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

【讨论】:

对我不起作用(conda 4.8.3;Python 3.8.3)。我的外壳中仍然有相同的“(基础)”。 @Awaaaaarghhh 提出一个新问题,详细说明它是如何失败的,我会看看。在问题中包含conda info 的输出。 @merv 可能只需要在执行命令后重新启动 PC。 - 只是重新启动 shell 没有帮助。 末尾多了一个空格。 OTOH 不需要在这种 bash 分配中添加双引号。【参考方案5】:

只需注释掉~/.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 <<<

【讨论】:

除了从外壳标签中删除“base”之外,您还应该确保知道注释这些行的后果。 我强烈建议不要这样做。 这些双感叹号警告表明您不应编辑此区域。此外,这删除了所有较新的 Conda v4.4+ shell 功能,只保留了 v4.4 之前的 PATH 管理,开发人员仅将其作为绝对基线回退(例如,仅适用于不受支持的 shell)。【参考方案6】:

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

【讨论】:

所有内容都会删除它 - 请重新阅读 OP(只希望更改 base)。即使这是所希望的,changeps1 也会更有效;这个解决方案仍然会导致运行代码来管理 PS1,即使它只插入空字符串。【参考方案7】:

对我来说,有效的是:

conda config --set changeps1 false 

【讨论】:

但是你如何让这个只防止 base 而没有其他环境呢?那是OP的问题。而是回答this question。【参考方案8】:

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

conda 停用

这个解决方案对我有用。和以前一样,我用 anaconda python 尝试了一些东西。

【讨论】:

【参考方案9】:

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

要停用它,请使用:

conda deactivate

【讨论】:

【参考方案10】:

您可以在 .bashrc 中添加一个命令,以从 PS1 中删除“(base)”字符串:

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

【讨论】:

您的答案在PS1 的开头添加了一个空格并在$ 之后删除了一个空格,因此文本看起来像:_rosgori@sa6:~$cd Documents/。这一行改进了这一点:PS1="$(echo $PS1 | sed 's/(base) //') ",不幸的是,当您激活另一个环境,然后停用时,(base) 将在那里。

以上是关于如何在更新 conda 后从终端提示符中删除(基础)的主要内容,如果未能解决你的问题,请参考以下文章

用户更新后从 Matlab 编辑 uicontrol 中删除光标?

如何在 conda 环境中使用 pip 进行安装?

PATH 未从 VSCode 终端中的 conda activate 正确更新

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

MySQL TRIGGER:从表 1 中删除后从表 2 中删除或更新

conda终端常用指令