✨
oh-my-posh でPythonのvenv promptが正しく表示されない
環境
- WSL2 Ubuntu22.04.03
- GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
- oh-my-posh 12.29.0
背景
- pythonでvenvやuvを使って.venvフォルダに仮想環境を作成する
-
. .venv/bin/activate
して仮想環境を有効化するとoh-my-poshがプロンプトに仮想環境名とPythonのバージョンを表示してくれる
設定どおりに書くと以下のような感じ
theme.omp.json
{
"type": "python",
"style": "powerline",
"powerline_symbol": "",
"foreground": "#100e23",
"background": "#906cff",
"template": "{{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .venv }}{{ end }} {{ .Full }}{{ end }} ",
"properties": {
"fetch_virtual_env": true,
"display_mode": "environment"
}
}
この状態で仮想環境を有効化すると以下のように表示される
仮想環境名が.venv
になっているが、prompt名はsample
になっているはずなので、sample
と表示してほしい。
このままだと別の作業フォルダに移動してもactivateした.venvを表示され続けるので、いったいどこの.venvなのかわからない。
やりたいこと
.venv
ではなくsample
とprompt名を表示してほしい
解決方法
.Venv.<環境変数名>
とするとtemplate内で任意の環境変数名を表示できる。
.venv/bin/activate
の中身を見るとVIRTUAL_ENV_PROMPT
という環境変数にpromptの値が格納されている模様。
したがってomp.jsonファイルのテンプレート部分を以下のように書き換える
theme.omp.json
{
{
# 一部省略
"template": "{{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Env.VIRTUAL_ENV_PROMPT }}{{ end }} {{ .Full }}{{ end }} ",
}
}
はい。
まとめ
ほんとにこれしか対策がないのか?oh-my-posh側の実装ミスなのか?がわからなくてモヤるけど動いたからヨシ。
ちなみにChatGPTに質問すると存在しない設定を教えられたり、任意の環境変数は表示できないからコマンド実行するSegmentを追加しろとか嘘言われた。かなしい。
Discussion