venv について
何をするもの?
- 何をするものか
- Python の実行環境を保持しておいて、切り替えるためのもの
- 具体的には、以下の情報をフォルダに保存
- バージョン : venv を作成したときの python パスにエイリアスが保持される
- pip で入れたパッケージがフォルダ内に保持される
- 環境の切り替え
- フォルダ内にある
activateファイルで環境変数を load - 元の状態に戻るには
deactivateコマンド (上記Loadで有効化されるコマンドのひとつ) を実行
- フォルダ内にある
- 典型的な使い方
- プロジェクト内に
.venv,venvのようなフォルダを作って配置 - →
.gitignoreにもあるし、それで合ってる気がする
- プロジェクト内に
後で見たとき用 簡易テンプレ (プロジェクト内に作る場合)
bash
python3 -m venv .venv # 作成
. .venv/bin/activate # アクティベート
activate 呼ぶタイミング
- pip installl する際
- プロジェクト内で python を呼ぶシェルスクリプト内
bash
pip freeze > requirements.txt # インストールしたパッケージを requirements.txt に書き出す
pip install -r requirements.txt # requirements.txt を使ってパッケージをインストール
venv を作成
コマンド
python3 -m venv <環境名>
特定のディレクトリに作成するなら
bash
mkdir ~/python-venvs # 環境を ここの下に作るとする (またはプロジェクトのフォルダ)
cd ~/python-venvs
which python3 # /opt/homebrew/bin/python3 だとする
python3 -V # 3.13.3 だったとする
python3 -m venv brew-3.13.3
→ カレントディレクトリ下に brew-3.13.3 というフォルダで環境が作られる
→ その中の bin/python は brew 版の python にリンクされる
実行した python バージョンに紐づく環境が作られるので、
標準インストール版の Python で venv 作成したい場合は、こう。
bash
/usr/bin/python3 -m venv system-3.9.3
自分的命名ルール
分からなくなるので、当面はこのルールにしてみる。
プロジェクト内の場合
.venvという名前で作る
共通のディレクトリの場合
- ~/python-venvs/[どこのパッケージ管理のpythonか]-[pythonバージョン]-[識別名(あれば)]
例:
- system-3.9.3
- brew-3.13.3
- pyenv-3.11.9-conf-1
- pyenv-3.11.9-conf-2
アクティベートする (切り替える=スクリプト読み込む)
切り替え前
bash
which python3 # /opt/homebrew/bin/python3 だとする
python3 -V # 3.13.3 だったとする
切り替え(アクティベート)
. ~/python-venvs/system-3.9.3/bin/activate
↑
実行ではなく、読み込みなので注意
→ 切り替わったことを確認
bash
which python3 # ~/python-venvs/system-3.9.3/bin/python3 になった
python3 -V # 3.9.3 になった
→ 以降、pip でライブラリをインストールしたら venv 以下に保持される
デアクティベート(抜けるコマンド)
deactivate
bash
which python3 # /opt/homebrew/bin/python3 に戻ってる
python3 -V # 3.13.3 に戻ってる
バージョン確認
いま設定されている venv を確認 (terminalから)
echo $VIRTUAL_ENV
いま設定されている venv を確認 (コードから)
py
python3 -c "import sys; print(sys.prefix)"
都度アクティベートはめんどくさいので対策 (いずれも非推奨)
スクリプト単位で venv を明示したい
shebang に指定しておけば良さそう(だが、たぶん一般的でない)
py
#!/Users/xxxx/python-venvs/default/bin/python
ただ、このとき、 ~/ といった変数が使えないので、
別ユーザとスクリプトを共有する場合は共通のディレクトリを明示する必要がありそう
デフォルトで使われる venv を .zshrc に設定入れておく
これは やってはダメ
これをやってしまうと、切り替えたくても毎回 同じ環境を向いてしまうことになって、
ハマる原因を作るだけになるので、やめておく。
.zshrc
. ~/python-venvs/default/bin/activate
以下広告