Skip to content

Python の venv 環境を direnv で自動的に有効/無効化する

Python で venv 環境を作成した際、該当ディレクトリに移動する毎に source venv/bin/activate する必要があります。 direnv を使うことでこれを自動化することが出来ます。 direnv は現時点で Release v2.31.0 が最新ですがバイナリが登録されていない為、今回は Release v2.30.3 を利用します。 尚、今回は Ubuntu 20.04LTS 上でテストしました。

direnv のインストール

github からインストールします。 上述の通り、今回は v2.30.3 をインストールします。

1
2
curl -L https://github.com/direnv/direnv/releases/download/v2.30.3/direnv.linux-amd64 -o /usr/local/bin/direnv && \
chmod 755 /usr/local/bin/direnv

bash を利用している場合、~/.bashrc に下記を追記しておきます。 direnv から設定ファイルを修正する際に利用するエディタ (EDITOR) も定義しておきます。

1
2
3
4
cat << 'EOF' >> ~/.bashrc
export EDITOR=vim
eval "$(direnv hook bash)"
EOF

Python3 のインストール

Python3 をインストールしておきます。 必要に応じて update-alternatives します。

1
2
apt -y install python3.9 python3.9-venv python3-pip && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 10

venv 環境を作成する

venv 環境を作成した後、同じディレクトリに .envrc というファイルを作成し、「このディレクトリへ移動した際に実行したいコマンド」を記載しておきます。 direnv を有効化しておく為に direnv allow を実行します。

1
2
3
4
5
mkdir hello-world
cd hello-world
python3 -m venv .venv
echo 'source .venv/bin/activate' > .envrc
direnv allow

もしくは direnv edit ..envrc を作成することも出来ます。 この場合は direnv allow を実行する必要はありません。

direnv を実行する

direnv は明示的に実行する必要はありません。 適切に Hook 設定されており、設定ファイルが用意されていれば以下のように「該当ディレクトリへ移動した際は venv を有効化」、「別のディレクトリへ移動した際は venv を無効化」してくれます。

1
2
3
4
5
[~]# cd hello-world/
direnv: loading ~/hello-world/.envrc
direnv: export +VIRTUAL_ENV ~PATH
[hello-world]# cd ..
direnv: unloading