12. 仮想環境とパッケージ¶
12.1. はじめに¶
Python アプリケーションはよく標準ライブラリ以外のパッケージやモジュールを利用します。またアプリケーションがあるバグ修正を必要としていたり、過去のバージョンのインターフェイスに依存しているために、ライブラリの特定のバージョンを必要とすることもあります。
そのため、1つのインストールされたPythonが全てのアプリケーションの要求に対応することは不可能です。もしアプリケーションAがあるモジュールのバージョン 1.0 を要求していて、別のアプリケーションBが同じモジュールのバージョン 2.0 を要求している場合、2つの要求は衝突していて、1.0 と 2.0 のどちらかのバージョンをインストールしても片方のアプリケーションが動きません。
この問題の解決策は 仮想環境 を作ることです。仮想環境とは、特定のバージョンの Python と幾つかの追加パッケージを含んだ Python インストールを構成するディレクトリです。
別のアプリケーションはそれぞれ別の仮想環境を使うことができます。先の例にあった要求の衝突を解決する場合、アプリケーションAが固有の仮想環境を持ってそこにライブラリのバージョン 1.0 をインストールし、アプリケーションBが持つ別の仮想環境にライブラリのバージョン 2.0 をインストールすることができます。そしてアプリケーションBがライブラリのバージョンを 3.0 に更新することを要求する場合も、アプリケーションAに影響しません。
12.2. 仮想環境の作成¶
仮想環境の作成・管理に使われるモジュールは、 venv
と呼ばれます。 venv
は、コマンドが実行された Python のバージョン (--version
オプションで表示される) をインストールします。例えば、 python3.12
でコマンドを実行すると、バージョン 3.12 がインストールされます。
仮想環境を作るには、仮想環境を置くディレクトリを決めて、 そのディレクトリのパスを指定して、 venv
をスクリプトとして実行します:
python -m venv tutorial-env
これは tutorial-env
ディレクトリがなければ作成して、その中に Python インタプリタ、その他関連するファイルのコピーを含むサブディレクトリを作ります。
仮想環境の一般的なディレクトリの場所は .venv
です。この名前は、通常はシェルで隠されているため、ディレクトリが存在する理由を説明する名前を付けても、邪魔にはなりません。また、一部のツールでサポートされている .env
環境変数定義ファイルによるクラッシュも防止します。
仮想環境を作ったら、それを有効化する必要があります。
Windows の場合:
tutorial-env\Scripts\activate
Unix や Mac OS の場合:
source tutorial-env/bin/activate
(このスクリプトは bash shell で書かれています。 csh や fish を利用している場合、代わりに利用できる activate.csh
と activate.fish
スクリプトがあります。)
仮想環境を有効化すると、シェルのプロンプトに利用中の仮想環境が表示されるようになり、python
を実行するとその仮想環境の Python を実行するようになります:
$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May 6 2016, 10:59:36)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>
仮想環境を無効化するには、ターミナルに:
deactivate
と入力します。
12.3. pip を使ったパッケージ管理¶
pip と呼ばれるプログラムでパッケージをインストール、アップグレード、削除することができます。デフォルトでは pip
は Python Package Index からパッケージをインストールします。ブラウザを使って Python Package Index を閲覧することができます。
pip
は "install" 、 "uninstall" 、 "freeze" など、いくつかのサブコマンドを持っています。 (pip
の完全なドキュメントは Python モジュールのインストール ガイドを参照してください。)
パッケージ名を指定してそのパッケージの最新版をインストールすることができます:
(tutorial-env) $ python -m pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3
パッケージ名のあとに ==
とバージョン番号を付けることで、特定のバージョンのパッケージをインストールすることもできます:
(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0
同じコマンドを再び実行した場合、pip
は要求されたバージョンがインストール済みだと表示して何もしません。別のバージョン番号を指定すればそのバージョンをインストールしますし、python -m pip install --upgrade
を実行すればそのパッケージを最新版に更新します:
(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
python -m pip uninstall
コマンドに削除するパッケージ名を1つ以上指定します。
python -m pip show
は指定されたパッケージの情報を表示します:
(tutorial-env) $ python -m pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:
python -m pip list
は仮想環境にインストールされた全てのパッケージを表示します:
(tutorial-env) $ python -m pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)
python -m pip freeze
はインストールされたパッケージ一覧を、python -m pip install
が解釈するフォーマットで生成します。一般的な慣習として、このリストを requirements.txt
というファイルに保存します:
(tutorial-env) $ python -m pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
requirements.txt
をバージョン管理システムにコミットして、アプリケーションの一部として配布することができます。ユーザーは必要なパッケージを install -r
でインストールできます:
(tutorial-env) $ python -m pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip
にはたくさんのオプションがあります。 pip
の完全なドキュメントは Python モジュールのインストール を参照してください。パッケージを作成してそれを Python Package Index で公開したい場合、 Python packaging user guide を参照してください。