Python で venv 環境を作成した際、該当ディレクトリに移動する毎に source venv/bin/activate
する必要があります。 direnv を使うことでこれを自動化することが出来ます。 direnv は現時点で Release v2.31.0 が最新ですがバイナリが登録されていない為、今回は Release v2.30.3 を利用します。 尚、今回は Ubuntu 20.04LTS 上でテストしました。
direnv のインストール
github からインストールします。 上述の通り、今回は v2.30.3 をインストールします。
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) も定義しておきます。
cat << 'EOF' >> ~/.bashrc
export EDITOR=vim
eval "$(direnv hook bash)"
EOF
Python3 のインストール
Python3 をインストールしておきます。 必要に応じて update-alternatives
します。
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
を実行します。
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 を無効化」してくれます。
[~]# cd hello-world/
direnv: loading ~/hello-world/.envrc
direnv: export +VIRTUAL_ENV ~PATH
[hello-world]# cd ..
direnv: unloading
コメント