pyenv + venvでPython3環境を構築する - $shibayu36->blog;の記事で、Python3でvenvを使った環境を構築することができた。しかしvenvでsource bin/activate
すると、自分の設定したプロンプトの左側に(venvの環境名)
という文字列が勝手に挟み込まれてしまって、あまり好みではなかった。
それを以下のように、venv環境の中にいたらpy:(pythonのversion):(venvの環境名)
という表示にしたかった。
のでやってみた。
プロンプトの左側の環境名表示を消す
まずプロンプトの左側の(venvの環境名)
を消す。こちら を参考にして、VIRTUAL_ENV_DISABLE_PROMPTという環境変数を設定しておけば良いらしい。
# virtualenvでpromptを変更しない export VIRTUAL_ENV_DISABLE_PROMPT=1
環境名をプロンプトの好きな場所に表示する
bin/activate
のコードを読んでみると、VIRTUAL_ENV
という環境変数にそのディレクトリのパスを入れているということが分かる。また、元々プロンプトの左側に出ていた内容も、VIRTUAL_ENV
のbasenameを表示していただけだった。
これらを参考にし、またpyenv version-name
を利用すれば、py:(pythonのversion):(venvの環境名)
という文字列を作ることが出来る。
PYTHON_VERSION_STRING="py:"$(pyenv version-name) PYTHON_VIRTUAL_ENV_STRING="" if [ -n "$VIRTUAL_ENV" ]; then PYTHON_VIRTUAL_ENV_STRING=":`basename \"$VIRTUAL_ENV\"`" fi
あとはこの変数を使ってPROMPTを設定すればOK。僕の場合は他にもperlのversionとかも出していたので、以下のようになった。
### ------------------ ### # prompt config precmd () { PERL_VERSION_STRING="pl:"$(plenv version-name) RUBY_VERSION_STRING="rb:"$(rbenv version-name) NODE_VERSION_STRING="nd:"$(ndenv version-name) PYTHON_VERSION_STRING="py:"$(pyenv version-name) PYTHON_VIRTUAL_ENV_STRING="" if [ -n "$VIRTUAL_ENV" ]; then PYTHON_VIRTUAL_ENV_STRING=":`basename \"$VIRTUAL_ENV\"`" fi } function setprompt () { PROMPT='%F{yellow}%<...<%~%<< %F{blue}${PERL_VERSION_STRING} ${RUBY_VERSION_STRING} ${NODE_VERSION_STRING} ${PYTHON_VERSION_STRING}${PYTHON_VIRTUAL_ENV_STRING} %F{blue}%D{%H:%M:%S} %F{green}${USER}%F{white}@%F{green}%m%F{white}%(!.#.$) ' } setprompt unfunction setprompt
https://github.com/shibayu36/config-file/blob/master/.zsh/appearance.zsh#L145
まとめ
venvが自動でプロンプトに表示する内容があまりかっこよくなかったので、自分でプロンプト表示をカスタマイズしてみた。以上二つをやれば、最初にやりたかったことができた。