PROMPT_COMMAND를 사용할 때 Python venv 모듈이 PS1에 가상 환경 이름을 추가할 수 없습니까?

PROMPT_COMMAND를 사용할 때 Python venv 모듈이 PS1에 가상 환경 이름을 추가할 수 없습니까?

나는 공식 Git Bash 프롬프트 지원을 사용하여 프롬프트의 일부로 현재 분기를 표시합니다.

python -m venv <dir>내 문제는 ( )를 사용하여 Python 가상 환경을 활성화하면 Bash 프롬프트의 일부로 source bin/activate가상 환경 이름이 표시되지 않는다는 것입니다 .(atlassian-watchdog)

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

in 대신 에 with 를 사용하고 PROMPT_COMMAND있기 때문에 실패하고 있다는 느낌이 강하게 듭니다 .~/.bashrcPS1GIT_PS1_SHOWCOLORHINTSPROMPT_COMMAND

PROMPT_COMMAND활성화 시 프롬프트에 환경 이름을 추가하기 위해 Python 가상 환경을 사용하는 방법이 있습니까 ?

~/.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

관련 정보