こんにちは。ナミレリです。
Pythonを使う上で、プロジェクトごとに異なるバージョンのPythonやライブラリを管理することは一般的な課題です。以前の記事ではPythonのバージョン管理に便利なツールとしてpyenvとvenvについてご紹介しました。下の記事です。
今回は、それに続いてvenvとdirenvを利用して、ディレクトリに入ったときに自動的にvenv仮想環境がactiveになるような方法を紹介します。
この記事はこんな人にオススメ
- source .venv/bin/activate を忘れがち
- deactivate を忘れがち
- ディレクトリにcdしたら自動的にvenvをactivateしたい
- ディレクトリから抜けたら自動的にvenvをdeactivateしたい
- M2 MacBook Air 13.6 インチ
- M1 Max MacBook Pro 14インチ
- macOS Ventura 13.4.1(c)
- Python 3.10.12
- direnv 2.32.3
目次
はじめに
Pythonを使ったプログラミングを進める上で、そのプロジェクトごとに異なるバージョンのPythonやライブラリを管理することは一般的な課題です。
以前の記事ではPythonのバージョン管理に便利なツールとしてpyenvとvenvについてご紹介しました。今回は、それに続いてvenvとdirenvを利用することで、どのように便利になるのかを紹介します。
venvとは?
venvはPythonに標準で組み込まれているモジュールで、プロジェクトごとに隔離されたPythonの実行環境を作成することができ、プロジェクトごとに必要なPythonのバージョンやライブラリを管理することができます。
venv自体はとても便利なモジュールですが、仮想環境を切り替えることを忘れることが私は良くあります。仮想環境のディレクトリにcdしたら自動でvenvしてくれると便利なんですが、そこで登場するのがdirenvです。
direnvとは?
direnvは、ディレクトリごとに異なる環境変数を設定できるツールです。ディレクトリを移動するだけで、それぞれのプロジェクトで必要な環境を自動的に切り替えることができます。これにより、Pythonのvenv仮想環境を切り替えわすれた!なんてことがなくなるとても便利なツールです。
それでは早速、direnvのインストール方法から基本的な使い方、そしてvenvとの連携方法までを一通り紹介していきます。
direnvのインストール
direnvは様々なOSに対応しています。ここではMacとUbuntuインストール方法を以下に記載します。
MacかUbuntuにインストールする方法
Macにインストール
brew install direnv
Ubuntuにインストール
sudo apt install direnv
direnvのバージョン確認
インストールできたら、念のため以下のコマンドでバージョン確認しておきます。2023年7月14日時点ではバージョン2.32.3です。
direnv version
2.32.3
以下のコマンドでパスを確認しておきます。
which direnv
/opt/homebrew/bin/direnv
direnvをシェルにフックする
まず、direnvをシェルにフックする必要があります。これにより、ディレクトリを移動するたびにdirenvが自動的に実行されるようになります。
zshを使っている場合、以下の行を.zshrcの最終行に追加します。
vi ~/.zshrc
eval "$(direnv hook zsh)"
.zshrcの最終行に追加後、シェルを再起動します。
exec $SHELL -l
自動的にvenv環境を切り替える
それでは今回の主旨である、venv仮想環境にcdすると自動的に仮想環境を切り替えるようにしてみます。まずはvenvで仮想環境を構築します。
venv仮想環境を準備する
今回は、ホームディレクトリにvenv_testというディレクトリを作り、その中にvenv環境を構築します。
venv仮想環境の構築
mkdir ~/venv_test
cd ~/venv_test
python -m venv .venv
作成した.venvの中身を確認します。bin、lib、includeなどが確認できます。
venv仮想環境の確認
ls .venv/
bin include lib pyvenv.cfg
~/venv_testにdirenvの設定ファイルである.envrcを作成します。venv仮想環境を有効化にするコマンドである、source .venv/bin/activateを記載します。
.envrcを準備する
vi .envrc
source .venv/bin/activate
セキュリティの観点から、direnvは新しく作成した.envrcを自動的には読み込みません。そのため、以下のコマンドを実行して.envrcを許可します。
.envrcを許可する
cd ~/venv_test
direnv allow
これにより、~/venv_testに移動すると自動的にvenvの仮想環境が有効化され、ディレクトリから出ると自動的に無効化されます。
direnvをテストする
venv_testに移動すると自動的にvenvの仮想環境が有効化され、ディレクトリから出ると自動的に無効化されることを、実際にテストして確かめます。
direnvの有効化の確認
venv_testに移動すると自動的にvenvの仮想環境が有効化されることを確認します。
自動有効化の確認
cd
cd venv_test
direnv: loading ~/venv_test/.envrc
direnv: export +VIRTUAL_ENV +VIRTUAL_ENV_PROMPT ~PATH
pipのパスを確認しておく
which pip
/Users/user/venv_test/venv/bin/pip
direnvの無効化の確認
venv_testディレクトリから出ると自動的に無効化されることを確認します。
自動無効化の確認
cd
direnv: unloading
powerlevel10kのプロンプトは、下図のように右プロンプトの仮想環境名は表示されなくなります。
pipのパスを確認しておく
which pip
/Users/user/.pyenv/shims/pip
direnvの主なオプション
direnv helpでヘルプを表示することができますが、主要なオプションを紹介します。
コマンド | 説明 |
---|---|
direnv allow | 現在のディレクトリの.envrc ファイル読み込みを許可する。 |
direnv deny | 現在のディレクトリの.envrc ファイル読み込みを禁止する。 |
direnv edit | .envrc ファイルを編集する。エディタは$EDITOR 環境変数で指定する。 |
direnv reload | 現在の環境を再読み込みします。.envrc ファイルが更新された場合に使用する。 |
direnv status | direnvの現在の状態を表示。 |
direnv version | direnvのバージョンを表示。 |
最後に
最後まで読んでいただきありがとうございます。今回の【Python】venvとdirenvで仮想環境の管理を効率的に!はいかがでしたでしょうか。
今回のは、Pythonの開発に役立つツールであるdirenvとvenvについて紹介しました。今後もPythonが楽しくなる情報を提供していきますのでお楽しみに!
\無料相談もできます/
・現役エンジニアから学べるオンラインに特化したプログラミングスクール。
・講師は全員、通過率10%の選考に合格した現役エンジニア。
・確かなスキルをもとにマンツーマンサポート。
・900社、30,000名を超える教育実績
Pythonを学んで機械学習の基礎を習得。
1人では続かない方のためのパーソナルメンターがつく学習プログラム。
機械学習プログラムを開発することがゴール。
・機械学習を学びエンジニアとして活躍したい方
・時間と場所にとらわれない働き方をしたい方
・将来の技術を学びたい学生の方
・機械学習を用いて起業したい方
・画像を解析して分類(画像から犬か猫かを分類する)
・データから花の種類を分類(データセットから花の種類を分類)
・住宅価格の分析と予想(データセットから部屋数と住宅価格を予想)
・ビットコインの価格変動を予測(ビットコインの過去のデータから価格変動を予想)
\無料相談もできます/