venv環境をプロンプトに表示

2020年04月11日

現在のvenv環境を知る

activateで環境変数 VIRTUAL_ENV がセットされる。 deactivateでアンセット。

$ echo $VIRTUAL_ENV
/home/hideo/work/memosphinx/venv

よってこのまま表示するなら、 プロンプトで $VIRTUAL_ENV を指定するだけでOK。

venvフォルダを含むフォルダ名だけ表示したい。

$ echo $(basename $(dirname $VIRTUAL_ENV))
memosphinx

結論

.bashrcで以下の関数を定義。

function venvname() {
    # https://qiita.com/ymdymd/items/51bf4145ec58654eaffc
    if [ "${VIRTUAL_ENV:+UNDEF}" ]; then
        echo $(basename $(dirname $VIRTUAL_ENV))
    fi
}

プロンプトの方は以下のように書き換える。

if [ "$color_prompt" = yes ]; then
    PS1='`venvname`\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n\$ '
else
    PS1='`venvname`\n${debian_chroot:+($debian_chroot)}\u@\h:\w\n\$ '
fi

こうすると、venv環境内にあるときは以下のようなプロンプトとなる。

(venv) memosphinx
hideo@winston:~/work/memosphinx
$