現代のPython開発環境はpyenv + Poetry(もしくは最近ならuv)を使って管理することが多いと思います。
名前が似ていてややこしいvenvは、これらと違ってPythonに標準搭載されているベーシックな仮想環境ツールです。色々ありますが、まずはこいつを改めて学びましょう。
venvとは?
こういう、みんなが使う開発ツールは巷にユーザー記事が溢れていますが、こういうものほど最初は公式ドキュメントを読んでみましょう。
- venvとは:Pythonのモジュールの一つ
- 軽量な稼働環境の作成を行う。ようは、色んなバージョンのPythonを同じPCの中で混在させて、プロジェクトによって使い分けられる
- インストール済みのPython(ベースPython)の上に仮想環境が作成される
- 仮想環境の中でpip installを行うと、仮想環境内にパッケージが追加される
しかしvenvは公式ページが結構分かりづらいです。公式で詰まったら、ユーザー記事を読むのが良いですね。
venvはPythonの中に内包されているモジュールで、パッケージ(pip installしてくるもの)をプロジェクトによって使い分けるために使います。
逆に、Python自体のバージョン管理はできません。
基本的な利用方法
インストールは不要。最近のPythonには標準ライブラリとして同梱されている
venvを使いたいプロジェクトディレクトリに移動する
cd ~/sample-pj
環境を作成する
python -m venv 環境名
環境名は venv
と名づける人が多いようです。
ちなみに -m
コマンドはPythonのモジュールを呼び出すときに使うオプションです。みんな大好き pip
も、いつもは省略形で使われますが、紐づくPythonを正しく指定したいときなどは省略せず python -m pip install ...
のように実行することができます。
venvは、pipのようにスタンドアロンのCLIツールとしてはインストールされないため、省略形で実行することはできません。
仮想環境を有効化する
source 環境名/bin/activate
sourceコマンドって分かりづらいですよね。引数に与えたシェルスクリプトを実行するためのコマンドです。
ただシェルスクリプトを実行するだけなら、sourceコマンドなしでも直接起動できるのですが、実行元ターミナルと別に子シェルが作られてしまいます。そのため、シェルスクリプトの目的が「現在のシェルの環境変数の設定」の場合、source経由で実行しないと目的を達成できません。
よくzshのターミナルに、変更したばかりの個人設定を反映させるときに source ~/.zshrc
コマンドを使いますね。あのファイルはまさにシェルスクリプトでしたね。かつ、内容は環境変数を設定するコマンドが中心でした。
つまり、上記のactivateというのはシェルスクリプトです。実行すると、起動中のシェルの環境変数を書き換えて、Pythonのインタープリタのパスを仮想環境のものに変更してくれます。
うまくいくと、ターミナルのプロンプト文字(zshなら %
)にvenvの環境名が表示されます。
仮想環境から抜ける
deactivate
これはactivate実行時に使えるようになるコマンドです。
おわりに
このように、venv単体ではPython自体のバージョン管理はもちろん、パッケージのバージョン管理機能もありません。プロジェクトごとにパッケージを分けられるという原始的な機能だけです。
基礎知識としてこれを学んだうえで、実務ではpyenvやPoetry、uvなどを使いこなしましょう。この後、別記事に書こうと思います。
おまけ
直接関係ないですが、私はMacのターミナルをPureというやつにカスタマイズするのが好きです。