使用 PROMPT_COMMAND 时,Python venv 模块无法将虚拟环境名称添加到 PS1?

使用 PROMPT_COMMAND 时,Python venv 模块无法将虚拟环境名称添加到 PS1?

我使用官方 Git Bash 提示符支持来显示当前分支作为提示符的一部分。

我的问题是,使用激活 Python 虚拟环境 ( python -m venv <dir>)source bin/activate不会显示虚拟环境名称 - (atlassian-watchdog)- 作为 Bash 提示符的一部分:

nlykkei:~/projects/atlassian-watchdog (master *)$

我有一种强烈的感觉,它失败了,因为我使用PROMPT_COMMANDin~/.bashrc而不是PS1,但GIT_PS1_SHOWCOLORHINTS只能与 一起使用PROMPT_COMMAND

有没有什么方法可以与 Python 虚拟环境一起使用PROMPT_COMMAND,以便在激活时将环境名称添加到提示中?

~/.git-prompt.sh

# If you would like a colored hint about the current dirty state, set
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
# the colored output of "git status -sb" and are available only when
# using __git_ps1 for PROMPT_COMMAND or precmd.

垃圾箱/激活

if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
    _OLD_VIRTUAL_PS1="${PS1:-}"
    if [ "x(atlassian-watchdog) " != x ] ; then
       PS1="(atlassian-watchdog) ${PS1:-}"
    else
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
        # special case for Aspen magic directories
        # see http://www.zetadev.com/software/aspen/
        PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
    fi
    fi
    export PS1
fi

~/.bashrc

# git prompt
source ~/.git-prompt.sh
GIT_PS1_SHOWCOLORHINTS=1
PROMPT_COMMAND='__git_ps1 "\u:\w" "\\\$ "'

答案1

解决方案是将 的相关部分bin/activate与结合起来~/git-prompt.sh

这是一个包装并修改第一个参数以包含虚拟环境的__git_ps1_venv()函数。__git_ps1()__git_ps1()

PS1变量应设置为提示的格式。

~/.bashrc

##################
# Prompt
##################

__git_ps1_venv() {
   local pre="$1"
   local post="$2"

   if [ -n "${VIRTUAL_ENV}" ] && [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ]; then
      if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
         # special case for Aspen magic directories
         # see http://www.zetadev.com/software/aspen/
         pre="[`basename \`dirname \"$VIRTUAL_ENV\"\``] ${pre}"
      else
         pre="(`basename \"$VIRTUAL_ENV\"`) ${pre}"
      fi
   fi

   __git_ps1 "${pre}" "${post}"
}

PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '

if [[ -r ~/.git-prompt.sh ]]; then
   . ~/.git-prompt.sh

   GIT_PS1_SHOWCOLORHINTS=1
   GIT_PS1_SHOWDIRTYSTATE=1
   GIT_PS1_SHOWSTASHSTATE=1
   GIT_PS1_SHOWUNTRACKEDFILES=1
   GIT_PS1_SHOWUPSTREAM="verbose name"

   PROMPT_COMMAND='__git_ps1_venv "'"${PS1%\\\$ }"'" "\\\$ "'
fi

相关内容