首页 > 解决方案 > Anaconda 环境 bash 前缀太长

问题描述

我在使用 -p 选项指定路径的项目文件夹中创建了一个 anaconda 环境,即不在默认的 anaconda3/envs 文件夹中:

conda create -p venv

问题是当我激活那个环境时,终端中的 bash 前缀太长了,即将环境的整个路径添加到提示符之前:

(/path/to/the/environment/venv) user@machine: ~/path/to/environment/$

有没有办法解决这个问题,意味着让它更短或从提示中删除前缀?

我的 $PS1:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

标签: bashanacondapython-venvps1

解决方案


Conda 提示自定义

Conda v4.6.0开始env_prompt,提供了用于定制 PS1 更改的配置选项。这是描述:

$ conda config --describe env_prompt
# # 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}) '

对您的情况有帮助的一种选择是仅使用{name}变量

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

这将仅显示环境的文件夹名称。例如,你的例子是

(venv) user@machine: ~/path/to/environment/$

请注意,这将使得当基本环境处于活动状态时提示将显示(anaconda3)而不是(base); 否则,其他命名的环境应该像往常一样出现。

如果您真的无法忍受,您可以运行basename {default_env}以获得与未命名环境相同的结果{name}并仍然保留base。那是,

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

推荐阅读