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.4から ensurepip という仕組みによって、Pythonのインストール時にpipコマンドがインストールされます。

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

リスト 6.1 pipをアップグレード(macOS、Linux)#
$ pip install pip --upgrade

Windowsの場合、このコマンドを実行すると現在入っているpipが削除されたうえに最新バージョンのpipのインストールに失敗してpipが使えなくなることがたまに発生します。以下のコマンドを使ってください。

リスト 6.2 pipをアップグレード(Windows)#
 > python -m pip install --upgrade pip

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

リスト 6.3 pipコマンドで (パッケージ名) をインストール#
$ pip install パッケージ名

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

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

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

6.2. venvとは#

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

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

venvのイメージ

図 6.2 venvのイメージ#

コラム: condaの場合

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

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

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

6.2.1. venv環境の作成#

venv環境を作成します。

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

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

Windowsの場合はスクリプトの実行権限を与えます(Set-ExecutionPolicy RemoteSigned -Scope CurrentUser )。このコマンドは一度実行したら、再び実行する必要はありません。

リスト 6.6 venv環境の作成(Windows)#
 > Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
 > python -m venv env
 > ls
 env/

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

6.2.2. venv環境の有効化#

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

そのためにはbashスクリプトの env/bin/activatesource コマンドで実行します(リスト 6.7 )。 Windowsの場合はスクリプトを実行します( リスト 6.8 )。

リスト 6.7 venv環境の有効化(macOS、Linux)#
 $ source env/bin/activate
 (env) $
リスト 6.8 venv環境の有効化(Windows)#
 > env\Scripts\Activate.ps1
 (env) >

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

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

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

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

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

6.2.3. venv環境の無効化#

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

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

リスト 6.10 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.11 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.12 pip install で同じ環境を作る#
$ git clone some-project-source-code
$ cd some-project
$ python3 -m venv env  # Windowsの場合は python -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. まとめ#

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

  • 便利なサードパーティ製パッケージのサイト PyPI

  • パッケージをインストールする pipコマンド

  • プロジェクトごとに隔離したPython環境を、 venvモジュール を使って作成、有効化、無効化する方法

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