如何恢复到 .condarc 中 env_prompt 参数的默认行为?

how to revert back to default behavior of env_prompt parameter in .condarc?

如果您使用 --prefix 标志在 conda 中创建一个 python 环境并激活它,post-激活环境会显示其整个路径。这可能是一条很长的路径,因此 conda-documentation 建议如下修复。

conda config --set env_prompt '({name})'

The problem is when you deactivate this environment, then you don't go back to the default behavior. Even if you activate the base environment, it would show you the entire path of the base environment instead of just (base).

比如我在C盘(Windows10)路径Users/username/Documents/GitHub/test_flask/.env下安装了conda环境。 BEFORE 应用命令 (conda config --set env_prompt '({name})'),post 激活它看起来像这样:

(C:\Users\username\Documents\GitHub\test_flask\.env) C:\Users\username\Documents\GitHub\test_flask>

AFTER应用命令(conda config --set env_prompt '({name})'),如果我激活环境,它看起来像这样:

(.env) C:\Users\username\Documents\GitHub\test_flask>

太棒了! 但是现在如果我停用这个环境 and/or 激活我的 base 环境,我会得到这个:

'(Anaconda3)'C:\Users\username\Documents\GitHub\test_flask>

不过,我想找回

'(base)'C:\Users\username\Documents\GitHub\test_flask>

So, how to fix this?

解决方案

事实证明,您需要执行以下操作才能恢复默认行为。 在这里,我们在 .condarc 文件中设置 env_prompt 变量的默认行为,再次停用安装在非默认位置的环境。

假设您在项目目录下创建 python-environment 目录 (.env),如下所示:

conda env create --prefix ./.env -f envirnment.yml

按照以下步骤激活和停用环境。

# for activating env
conda config --set env_prompt '({name})'
conda activate ./.env


# for deactivating env
conda config --set env_prompt '({default_env})'
conda deactivate
conda activate base

env_prompt 变量的描述

来源:conda-config: .condarc file

### .condarc file (env_prompt section)

# # env_prompt (str)
# #   Template for prompt modification based on the active environment.
# #   Currently supported template variables are '{prefix}', '{name}', and
# #   '{default_env}'. '{prefix}' is the absolute path to the active
# #   environment. '{name}' is the basename of the active environment
# #   prefix. '{default_env}' holds the value of '{name}' if the active
# #   environment is a conda named environment ('-n' flag), or otherwise
# #   holds the value of '{prefix}'. Templating uses python's str.format()
# #   method.
# # 
# env_prompt: '({default_env}) '

还有更野蛮的方法! "issue" 来自 .condrac 文件。

  1. 删除文件有效(我的文件位于 C:\Users\username,但如果找不到,.condarc doc 会为您提供其他位置)。下次你在 .condarc 文件中 --set smth 时,conda 将重新调用它。

  2. 如果您已经使用了 conda config 命令,那么您的 .condarc 文件可能会包含其他行,而不仅仅是 env_prompt: "..."。然后找到该文件,打开它(Notepad++ 运行良好)并删除受影响的行。

我的OS: Win10-64 最新版本

据我了解,以 conda env config vars 开头的命令应该可以解决此类问题,但出于某种原因,我用这样的命令更改 env_prompt 变量没有效果。

但我想出了一个替代方法:您只需要将一个全新的 .condarc 文件放在 您环境的根目录 中。在你的情况下,C:\Users\username\Documents\GitHub\test_flask\.env\.condarc。这样的内容应该足够了:

env_prompt: '({name}) '

请注意,您可能需要激活您的环境两次(第一次加载本地 .condarc,第二次应用它)。

另一种方法是在所需环境处于活动状态时使用 --env 选项和 conda config

conda activate .\.env
conda config --set env_prompt '({name})' --env

这似乎是更健壮和方便的方法,但它不适合我,因为我在 makefile 的上下文中工作。

如果你使用命令 conda info 你可以看到哪些配置文件是有效的。

如果你只想return到默认设置,使用下面的命令(如docsenv_prompt部分所示)。在我的例子中,我的环境之一处于活动状态,所以我猜它是一个全局变量。

$ conda config --set env_prompt '({default_env}) '

请注意,新激活某些环境后可以看到更改,例如:

$ conda deactivate
$ conda activate base

我进入 C:\Users 并查看了文件夹的底部并删除了 .condarc 文件,我能够在重新启动 Conda 后激活所有环境。