はじめに
Pythonを勉強し始めると、わりと早い段階で「仮想環境」という言葉に出会います。というか、仮想環境なしでのPythonプログラミングは基本しなくなると思います。
本記事は、まだ勉強中ですが仮想環境についてまとめてみようと思います。次のような事柄を扱います。
- Pythonの処理系はどうやって入っているのか
- 仮想環境とは何か
- 仮想環境があると何がうれしいのか
- venvでの作り方
- もう一歩進んだ話(uvなど)
Pythonの処理系はどうやってインストールされているのか
Pythonは「言語」だけではない
Pythonはプログラミング言語ですが、実際に動かすには「処理系(インタプリタ)」が必要です。
処理系とはプログラムとして実行されるための仕組みのことです。一般的には複数のプログラム関わっています。
一般的にPythonというと、CPythonという処理系の実装が使われることが多いですが、
- CPython(Cで書かれた公式実装)
- PyPy(JIT付き高速系)
- Jython(JVM上で動く)
- IronPython(.NET上で動く)
といった処理系もあります。それぞれいろいろな場面で使われます。
例えば、ターミナルで
python --versionと打つとバージョンが表示されます。これは、そのマシンにインストールされているPythonの処理系が動いているということです。
Pythonがどうインストールされてるか
処理系は他のアプリケーションと同様に、OS上にインストールして実行します。そのため、基本的には各OSの仕組みに従って導入されます。
Windowsの場合は、公式サイトからインストーラをダウンロードして入れることが多いです。
macOSは標準で入っていることもありますが、Homebrewなどで入れ直すこともあります。
Linuxは、aptやdnfなどのパッケージマネージャ経由で入っていることが多いです。
Pythonでは「システムに入っているPython」と「自分が使いたいPython」が必ずしも一致しない、という点が少しややこしいところです。
Pythonにはバージョンがあり、現在は2系のサポートが終了し、3系が主流になっています。しかし、3系の中でもバージョンによって仕様や利用できる機能に違いがあります。
さらに、Pythonには先ほど言及したように複数の実装(処理系)が存在します。通常はCPythonが使われますが、実装やバージョンが異なれば、利用できるライブラリやパッケージの互換性にも影響が出ることがあります。
また、OSにインストールされているPythonは、システム内部でも利用されています。そのため、システムのPython環境を自分の都合で変更すると、ツールが動かなくなるなどの問題が発生する場合があります。
加えて、1つのPython環境にライブラリを追加し続けると、依存関係が複雑になり、容量も肥大化していきます。
仮想環境とはどういうものか
仮想環境=プロジェクト専用のPython空間
仮想環境とは、一言でいうと「そのプロジェクト専用のPython実行環境」です。
Python本体をもう一つインストールするわけではありません。既存のPythonをベースにして、パッケージのインストール先を分離した空間を作るイメージです。
つまり、
- プロジェクトAでは numpy 1.x
- プロジェクトBでは numpy 2.x
のように、同じマシン内で違うバージョンを共存させることができます。
実体は何なのか
仮想環境を作ると、ディレクトリがひとつ生成されます。
その中に
- 専用のpython実行ファイル
- pip
- site-packages(ライブラリ置き場)
などがまとまって入ります。
実際には、完全に独立したPythonというよりは「参照を切り替えている」仕組みに近いです。
仮想環境があるとどう嬉しいのか
依存関係の衝突を防げる
あるプロジェクトでライブラリをアップデートしたら、別のプロジェクトが動かなくなる、という事態が起きました。
グローバル環境(つまりシステムにインストールしてあるPython)に全部ライブラリをインストールしていたのが原因でした。
仮想環境を使うと、プロジェクトごとにライブラリが分離されるので、この問題がほぼ起きません。
再現性が高くなる
requirements.txtなどで依存パッケージを固定しておけば、このプロジェクトはこの環境で動くという状態を再現できます。
AI系やWeb系など、依存が多い分野ではほぼ必須だと思います。
仮想環境の作り方(venv)
venvとは
venvは、Python標準で用意されている仮想環境作成ツールです。追加インストールなしで使えます。
作成方法
プロジェクト用ディレクトリで以下を実行します。
python -m venv venvこれで「venv」というフォルダが作られます。
有効化
有効化はスクリプトを実行することで行います。
# Windows:
venv\Scripts\activate
# Linux / macOS:
source venv/bin/activate有効化すると、プロンプトの先頭に (venv) と表示されます(ターミナルによってやや表示が違います)
この状態で pip install すると、その仮想環境の中だけにライブラリやパッケージがインストールされ、システムのPythonにはインストールされません。
終了方法
# Windows:
deactivate
# Linux / macOS:
deactivateと打てば仮想環境状態は終了し元に戻ります。
もし、その状態でpip installすると、今度はシステムのPythonにライブラリがインストールされることになります。
仮想環境かそうでないかは、注意しないといけないですが、思っていたよりも単純な仕組みです。
発展的な使い方(uvなど)
最近よく聞くのが「uv」です。
uvはRust製の高速なPythonパッケージマネージャ兼仮想環境ツールです。
特徴としては、
- pipより高速
- 仮想環境作成も一体化
- lockファイルによる厳密な依存管理
といった点があります。
従来は
- venvで環境を作る
- pipでインストールする
という分離された流れでしたが、uvではそれをまとめて扱えます。
大規模プロジェクトや依存が複雑な場合は、こうしたさらに依存を能動的に管理するツールが使われることが多いようです。
ただ、学習段階ではまずvenvで仕組みを理解してからの方が腑に落ちやすいと思います。
まとめ
最初は「仮想環境って本当に必要?」と思っていました。
ですが実際に複数プロジェクトを触り始めると、
- バージョン衝突
- ライブラリの上書き
- 環境再現の難しさ
といった問題にすぐ直面します。
仮想環境は、Pythonを安全に使うための最低限の仕組みだと感じました。
まずはvenvで基本を理解する。
必要に応じてuvなどのモダンなツールを使う。
この流れで進めれば、環境トラブルに悩まされる時間はかなり減るはずです。


コメント