【问题标题】:Displaying active conda virtual environment in terminal via .bash_profile通过 .bash_profile 在终端中显示活动的 conda 虚拟环境
【发布时间】:2019-09-13 09:42:15
【问题描述】:

问题

我正在尝试自定义我的终端以更清晰地显示关键信息,并对其进行颜色编码。

我目前在激活新的 conda 虚拟环境时遇到问题,它的名称重复了两次。

我尝试在 .bashrc 文件中实现 $CONDA_DEFAULT_ENV, $CONDA_PREFIX 无济于事,并且还通过反复试验尝试编辑 .bash_profile anaconda 代码。

.bash_profile

# added by Anaconda3 2019.07 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/anaconda3/etc/profile.d/conda.sh" ]; then
# . "/anaconda3/etc/profile.d/conda.sh"  # commented out by conda initialize
        CONDA_CHANGEPS1=false conda activate base
    else
        \export PATH="/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<

# !! Connects to .bashrc file for customization !!
if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

.bashrc

green=$(tput setaf 71);
white=$(tput setaf 250);
reset=$(tput sgr0);

PS1="\[${green}\](\$(basename \$CONDA_DEFAULT_ENV)) ";  # virtual env
PS1+="\[${white}\] $(pwd)/\W";                          # current directory
PS1+="\[${white}\] \n ";                                # new line
PS1+="\[${reset}\]-> ";                                 # code prompt
export PS1;

输出

正如您在下面看到的(flask_env),一旦激活就会重复,只有第二个条目被格式化为绿色:

(base)  /Users/AlexBargh/~
 -> conda activate flask_env
(flask_env) (flask_env)  /Users/AlexBargh/~
 ->

期望的输出

如果我在终端中再次运行 source .bashrc,这个问题似乎可以自行解决 - 只想将其编码。

我试图摆脱第一个 (flask_env) 条目只是为了保持 (base) 和 (flask_env) 都格式化为绿色。

非常感谢任何帮助!

【问题讨论】:

  • 旁注:不要忘记涵盖$CONDA_DEFAULT_ENV 未定义的情况。现在,每当您从 base 停用时,您都会出错。

标签: bash terminal anaconda conda


【解决方案1】:

CONDA_CHANGEPS1=false 仅位于通过设置逻辑的三个代码路径之一中。会不会是第一个带有\eval的分支被取而代之,所以conda毕竟改变了PS1?

尝试无条件设置export CONDA_CHANGEPS1=false

【讨论】:

  • 是的,它几乎肯定会跟随第一个分支——这是启动交互式 shell 的默认设置。其他分支用于当有人调用 bash -l foo.sh 时,脚本将在默认的 Conda 环境中执行,但 Conda 不会为更改 PS1 而烦恼。您的建议并不是最佳实践,因为 Conda 为此提供了一个配置选项(即conda config --set changeps1 False)。但是,OP 确实不想禁用 PS1 更改,而是对其进行补充,所以我不确定这里是否合适。
  • 再想一想,禁用 Conda 的 PS1 更改可能是最简单的解决方案,因为它总是先于现有的 PS1,并且 OP 已经有一些独立于 Conda 操作的东西。如果您将推荐更改为 conda config --set changeps1 False,我很乐意投票。
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 2018-07-15
  • 2018-08-02
  • 1970-01-01
  • 2022-11-02
  • 2019-11-02
  • 1970-01-01
相关资源
最近更新 更多