Pythonの仮想環境について

Pythonの仮想環境について プログラミング
Pythonの仮想環境について

はじめに

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などのモダンなツールを使う。

この流れで進めれば、環境トラブルに悩まされる時間はかなり減るはずです。

コメント

タイトルとURLをコピーしました