6. サードパーティ製パッケージと venv

節サブタイトル:隔離されたPythonの実行環境で便利なサードパーティ製パッケージを利用する。

本節では、Pythonをより便利にするサードパーティ製パッケージのインストール方法と、環境を壊さずにインストールするための venv モジュールの使い方を説明します。

6.1. サードパーティ製パッケージ

Python は標準ライブラリだけでもいろいろなことができますが、さらに便利なサードパーティ製のパッケージも提供されています。

サードパーティ製パッケージは PyPI (the Python Package Index、パイピーアイと読む)というサイトで情報が共有されています。

PyPI - the Python Package Index

図 6.1 PyPI - the Python Package Index

6.1.1. pipコマンド

サードパーティ製パッケージをインストールするには、 pipコマンド を使用します。

Python 3.6では ensurepip という仕組みによって、Pythonのインストール時にpipコマンドがインストールされます。

pipもpipコマンドでアップグレードを行えます。まずは、現在イントールされているpipコマンドを最新にアップグレードしましょう。 アップグレードは、次のコマンドを実行します。

リスト 6.1 pipをアップグレード
$ pip install pip --upgrade

以下はpipコマンドのサンプルです ここでは実行しないで、以下のvenv環境を作ってから実行しましょう。 pip コマンドを利用すると以下の様なコマンドで簡単にサードパーティ製パッケージをインストールできます。

リスト 6.2 pipコマンドでrequestsをインストール
$ pip install requests

次に、独立したPython環境を構築する venv モジュールについて説明します。

コラム: Windows環境でpip実行時にエラーになる場合

PATH環境変数を確認し、Python3 をインストールしているPATHが設定されているかどうか確認してみてください。

6.2. venvとは

複数のプロジェクトで異なるサードパーティ製パッケージを利用することはよくあります。その場合、プロジェクトごとにインストールするパッケージを切り替えられると便利です。

venvはプロジェクトごとに隔離されたPythonの仮想環境(Virtual Environments)を作成します。

注釈

pyvenvスクリプトの廃止について

以前は pyvenvスクリプトを利用したPython実行環境の作成方法を紹介していました。

ですが、Python3.6 から pyvenvスクリプトが非推奨となり将来的に削除されるので一部説明を変更をいたしました。 今後は「python -m venv」を利用するようにしてください。

pyvenvスクリプトが廃止になった経緯は下記URLを参照してください。

http://docs.python.jp/3/whatsnew/3.6.html#id8

6.2.1. venv環境の作成

venv環境を作成します。

作成には venv モジュールを使用します。引数には作成する環境の名前を指定します。

リスト 6.3 venv環境の作成(macOS、Windows、Linux)
 $ python3 -m venv env
 $ ls
 env/

現在のフォルダに、envというディレクトリが作成されます。

6.2.2. venv環境の有効化

作成した venv 環境を有効化(activate)します。

そのためにはbashスクリプトの env/bin/activatesource コマンドで実行します(リスト 6.4 )。 Windowsの場合はバッチファイルを実行します( リスト 6.5 )。

リスト 6.4 venv環境の有効化(macOS、Linux)
 $ source env/bin/activate
 (env) $
リスト 6.5 venv環境の有効化(Windows)
 > env\Scripts\activate.bat
 (env) >

venv 環境を有効化すると、プロンプトの前に環境名(ここでは env )が表示されます。そして、環境変数 PATH の先頭にenv/binが追加され、 venv 環境のPythonが実行されるようになります。

ここでは、 pip コマンドで requests (HTTPクライアントのパッケージ)をインストールします(リスト 6.6)。

リスト 6.6 パッケージのインストール
 (env)$ pip install requests
 (env)$ python
 >>> import requests
 >>> # requestsがインポートできる

requestsenv/lib/python3.6/site-packages 配下にインストールされます。

またPythonパッケージの中にはコマンドとして実行可能なファイルが含まれている場合があります。それらのファイルは env/bin 配下にインストールされます。

6.2.3. venv環境の無効化

venv 環境を無効化(deactivate)するには、 deactivate コマンドを実行します(リスト 6.7)。

無効化した後、元の環境で requests をインポートするとエラーとなり、 venv 環境でのみ requests がインストールされていることがわかります。

リスト 6.7 venv環境を無効化
 (env)$ deactivate
 $
 $ python
 >>> import requests
 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
 ImportError: No module named requests
 >>> # エラーが出力される

コラム: 仮想環境の共有(pip freezeとrequirements.txt)

venvで仮想環境を作成できることの必要性はわかってもらえたと思います。 あるプロジェクトを複数人で開発する場合に、インストールしているパッケージ情報はどのように共有するのでしょうか?

pipにはそのための機能があります。 pip freeze コマンドを実行すると、インストールしたパッケージの一覧が出力されます。 この情報をファイルに保存して、プログラムのソースコードと一緒にバージョン管理します。 ファイル名としては requirements.txt がよく知られている名前なので、他の人にパッケージの一覧が入っているという意図が伝わりやすいです。

リスト 6.8 pip freeze コマンドでパッケージの情報を書き出す
(env) $ pip install requests
(env) $ pip freeze > requirements.txt
(env) $ cat requirements.txt
certifi==2017.4.17
chardet==3.0.4
idna==2.5
requests==2.18.1
urllib3==1.21.1

プロジェクトの他のメンバーは、ソースコードをダウンロードした後、以下の手順で仮想環境に同じパッケージをインストールします。

リスト 6.9 pip install で同じ環境を作る
$ git clone some-project-source-code
$ cd some-project
$ python3 -m venv env
$ source env/bin/activate
(env) $ pip install -r requirements.txt
Collecting certifi==2017.4.17 (from -r hoge.txt (line 1))
  Using cached certifi-2017.4.17-py2.py3-none-any.whl
(中略)
Installing collected packages: certifi, chardet, idna, urllib3, requests
Successfully installed certifi-2017.4.17 chardet-3.0.4 idna-2.5 requests-2.18.1 urllib3-1.21.1
(env) $

このようにして、同一の環境をプロジェクトメンバー全体で共有します。

6.3. conda の場合

Anaconda を使っている場合は pipvenv の代わりに Conda というパッケージ管理ツールを使用します。

condaではそれぞれ以下のコマンドで、サードパーティー製パッケージのインストール、環境の作成、有効化、無効化が行えます。

リスト 6.10 conda コマンドの例
$ conda create --name env python # 環境を作成
$ source activate env # 環境の有効化
(env) $ conda install requests # パッケージのインストール
(env) $ source deactivate # 環境の無効化

6.4. まとめ

本節では、以下について説明しました。

  • 便利なサードパーティ製パッケージのサイト PyPI
  • パッケージをインストールする pipコマンド
  • プロジェクトごとに隔離したPython環境を、 venvモジュール を使って作成、有効化、無効化する方法

次節では、venv環境にパッケージをインストールして、スクレイピングを行う方法を説明します。