Python 仮想環境の管理

PythonBeginner
オンラインで実践に進む

はじめに

Python プロジェクトでは、プロジェクトごとに異なるバージョンのパッケージが必要になることがよくあります。仮想環境を使用すると、プロジェクトごとに独自の Python インタプリタとパッケージディレクトリを持つことができるため、あるプロジェクトのためにパッケージをインストールしても、グローバルな Python 環境や他のプロジェクトに影響を与えることはありません。

この実験では、組み込みの venv モジュールを使用して仮想環境を作成し、それを有効化してパッケージをインストールします。さらに、2つ目の環境を作成することで、それぞれの環境が互いに分離されていることを確認します。すべての作業は /home/labex/project ディレクトリ内で行います。

プロジェクト仮想環境の作成

このステップでは、Python プロジェクト用の仮想環境を作成します。仮想環境とは、Python 実行ファイル、有効化スクリプト、および独自のパッケージインストール領域を含むディレクトリのことです。

まず、プロジェクトのワークスペースに移動します。実験ファイルを /home/labex/project 以下にまとめることで、環境を見つけやすくし、システムファイルと作業内容を分離できます。

cd /home/labex/project

環境を作成する前に、システムで使用可能な Python のバージョンを確認します。python3 --version コマンドを実行すると、venv が使用するインタプリタのバージョンが表示されます。

python3 --version

以下のような Python 3 の出力が表示されるはずです。

Python 3...

次に、project-env という名前の仮想環境を作成します。-m venv オプションは、Python に対して組み込みの venv モジュールをコマンドラインツールとして実行するように指示するもので、project-env は環境を保持するディレクトリ名です。

python3 -m venv project-env

新しいディレクトリの中身をリスト表示して、venv によって作成された構造を確認します。

ls project-env

正確なエントリは多少異なる場合がありますが、以下のようなファイルやフォルダが表示されるはずです。

bin
include
lib
pyvenv.cfg

pyvenv.cfg ファイルには、環境がどのように作成されたかが記録されています。中身を確認してみましょう。

cat project-env/pyvenv.cfg

include-system-site-packages = false という設定を探してください。この設定は、この環境がグローバルにインストールされた Python パッケージを自動的に共有しないことを意味しています。

環境の有効化とパッケージのインストール

このステップでは、project-env を有効化し、その中にパッケージをインストールします。有効化を行うとシェル環境変数が変更され、pythonpip といったコマンドが仮想環境内のものを優先的に参照するようになります。

プロジェクトのワークスペースにいることを確認してください。

cd /home/labex/project

source コマンドを使用して、現在のシェルで有効化スクリプトを実行します。子プロセスとしてのスクリプトでは親シェルを変更できないため、現在操作しているシェルを更新するために source を使用することが重要です。

source project-env/bin/activate

有効化されると、シェルプロンプトの先頭に (project-env) と表示されるのが一般的です。Python から2つのパスを出力して、python が仮想環境内を指していることを確認します。sys.prefix はアクティブな環境を、sys.base_prefix はベースとなる Python インストール先を示します。

python -c "import sys; print(sys.prefix); print(sys.base_prefix)"

1行目には仮想環境のパスが、2行目にはシステムの Python インストール場所が表示されるはずです。

/home/labex/project/project-env
/usr...

アクティブな環境に colorama という小さなパッケージをインストールします。python -m pip を実行することで、現在アクティブな Python インタプリタに紐付いた pip が使用されます。

python -m pip install colorama==0.4.6

インストールが完了すると、pipcolorama のインストール成功を報告します。

Python を起動し、パッケージをインポートしてバージョンを表示することで、インストールを確認します。

python -c "import colorama; print(colorama.__version__)"

出力は以下のようになります。

0.4.6

deactivate コマンドを実行すると、仮想環境から抜けることができます。これにより、pythonpip の参照先が通常のシェル環境に戻ります。

deactivate

2つ目の分離された環境の作成

このステップでは、別の仮想環境を作成し、project-env と比較します。個別の環境は、同じベースの Python インタプリタを使用しながら、インストールされたパッケージをそれぞれ独立して保持できます。

プロジェクトのワークスペースに戻ります。

cd /home/labex/project

システムの python3 実行ファイルの場所を確認します。command -v コマンドは、指定したコマンド名に対してシェルが実行するパスを表示します。

command -v python3

通常、パスは以下のようになります。

/usr/bin/python3

tools-env という名前の2つ目の環境を作成します。--prompt tools-env オプションは、有効化時のプロンプトテキストを設定するもので、複数の環境を扱う際に便利です。

python3 -m venv --prompt tools-env tools-env

次に、2つの環境のプレフィックスを比較します。それぞれのコマンドは、異なる仮想環境内の Python 実行ファイルを実行し、そのアクティブなプレフィックスを表示します。

project-env/bin/python -c "import sys; print(sys.prefix)"
tools-env/bin/python -c "import sys; print(sys.prefix)"

2つの異なるディレクトリが表示されるはずです。

/home/labex/project/project-env
/home/labex/project/tools-env

最後に、tools-envcolorama が利用可能かどうかを確認します。coloramaproject-env にのみインストールしたため、2つ目の環境では見つからないはずです。

tools-env/bin/python -c "import importlib.util; print(importlib.util.find_spec('colorama'))"

期待される出力は以下の通りです。

None

これにより、ある仮想環境にインストールされたパッケージが、別の仮想環境に自動的に反映されないことが確認できました。

まとめ

Python 仮想環境の作成、設定の確認、有効化、パッケージのインストールを行い、2つ目の環境を作成してパッケージが分離されていることを確認しました。また、python3 -m venvsourcepython -m pip の使用方法や、環境ごとの Python パスを直接指定してどのインタプリタが実行されているかを把握する方法を学びました。