Skip to content

direnv で Python 仮想環境を有効化した際にプロンプト表示も変更するスクリプト

以前に以下のメモを書きました。

一般的に「手動で Python 仮想環境を有効化」した際はプロンプトに仮想環境名が表示される場合が多いと思います。 ですが、上記の過去メモでは direnv で Python 仮想環境を有効化した際、プロンプト表示が変更されない仕様になっていました。 そこで今回は「direnv で Python 仮想環境を有効化した際に、プロンプトに仮想環境名を表示する」ようにスクリプトを改修しました。

変更前

/usr/local/bin/venv

従来のスクリプトは以下でした。

1
2
3
4
5
6
7
8
9
cat << 'EOF' > /usr/local/bin/venv
#!/bin/sh

python3 -m venv .venv
echo 'source .venv/bin/activate' > .envrc
direnv allow
.venv/bin/python3 -m pip install --upgrade pip
EOF
chmod 755 /usr/local/bin/venv

~/.bashrc

~/.bashrc では direnv を利用する為に以下の設定をしています。

1
2
3
# direnv
export EDITOR=vim
eval "$(direnv hook bash)"

変更後 (※ uv 対応版)

/usr/local/bin/venv

変更後のスクリプトは以下です。 .envrc の内容を修正しています。 また、過去スクリプトでは

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
cat << 'EOF' > /usr/local/bin/venv
#!/bin/sh

uv venv
cat << 'EOF2' > .envrc
source .venv/bin/activate
if [ -z "${VENV_BASE:-}" ] && [ -n "${VIRTUAL_ENV:-}" ]; then
    VENV_BASE=$(basename "${VIRTUAL_ENV}")
fi
export VENV_BASE
unset PS1
EOF2
direnv allow
EOF
chmod 755 /usr/local/bin/venv

~/.bashrc

~/.bashrcPS1 環境変数の定義を追加します。

1
2
3
4
# direnv
export EDITOR=vim
eval "$(direnv hook bash)"
PS1='${VENV_BASE:+($VENV_BASE)}'$PS1