Skip to content
Latchkey

virtualenvとは?Pythonの仮想環境を解説

virtualenvは独自のパッケージを持つ隔離されたPython環境を作り、グローバルな依存関係のセットを共有することで、あるプロジェクトが別のプロジェクトを壊さないようにします。

仮想環境は、Pythonプロジェクトに、システムのPythonや他のプロジェクトから分離された、独自のプライベートなインストール済みパッケージのセットを与えます。virtualenvはこのための元祖ツールであり、標準ライブラリの「venv」モジュールはその組み込みの親類です。いずれにせよ、依存関係の衝突を防ぐのは隔離です。

virtualenvとは

virtualenvは、Pythonインタープリタへのリンクとプライベートなsite-packagesを持つ自己完結型のディレクトリを作るツールです。有効化すると「python」と「pip」がその環境を指すようになり、グローバルなPythonを汚す代わりにインストールがそこに落ちます。組み込みの「python -m venv」も同じ中心的な機能を提供します。

隔離の仕組み

環境を有効化すると、シェルのPATHが調整され、環境のバイナリが先に来るようになります。するとpipは環境のsite-packagesにインストールします。各プロジェクトが独自の環境を持つため、プロジェクトAはrequests 2.31を、プロジェクトBは2.20を、競合なく使えます。無効化すると通常のPATHに戻ります。

使用例

作成し、有効化し、インストールし、環境の中で作業します。

Creating and using a venv
# create and activate (built-in venv)
python -m venv .venv
source .venv/bin/activate

# install into the isolated environment
pip install -r requirements.txt

CI/CDでの役割

CIでは、jobごとに新しい仮想環境を用意することで、残存するグローバルパッケージのない、きれいで再現性のある依存関係のセットが保証されます。多くのpipelineはvenvを作り、固定されたrequirementsをインストールし、その中でtestを実行します。venvやpipのダウンロードcacheを実行間でcacheすると、隔離を保ちつつ繰り返しのインストールが高速化されます。

代替ツール

組み込みのvenvは追加インストールなしでほとんどのニーズをカバーします。Condaはデータサイエンス向けのスタックのために環境とバイナリ依存関係を管理します。Poetryとuvは、より大きなワークフローの一部として環境を作成し管理してくれます。virtualenv自体は、より高速な作成やより広いインタープリタサポートなど、venvにいくつかの機能を追加します。

重要なポイント

  • virtualenvはプロジェクトのPythonパッケージをグローバルインストールから隔離します。
  • 有効化するとPATHが調整され、pipとpythonがその環境を対象にします。
  • CIのjobごとに新しいvenvを使うと、きれいで再現性のある依存関係のセットが得られます。

関連ガイド