6. サードパーティ製パッケージと venv#
節サブタイトル
隔離されたPythonの実行環境で便利なサードパーティ製パッケージを利用する。
本節では、Pythonをより便利にするサードパーティ製パッケージのインストール方法と、環境を壊さずにインストールするための venv モジュールの使い方を説明します。
6.1. サードパーティ製パッケージ#
Python は標準ライブラリだけでもいろいろなことができますが、さらに便利なサードパーティ製のパッケージも提供されています。
サードパーティ製パッケージは 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コマンドを最新にアップグレードしましょう。 アップグレードは、次のコマンドを実行します。
$ pip install pip --upgrade
以下はpipコマンドのサンプルです ここでは実行しないで、以下のvenv環境を作ってから実行しましょう。 pip コマンドを利用すると以下の様なコマンドで簡単にサードパーティ製パッケージをインストールできます。
$ pip install requests
次に、独立したPython環境を構築する venv モジュールについて説明します。
コラム: Windows環境でpip実行時にエラーになる場合
PATH環境変数を確認し、Python 3 をインストールしているPATHが設定されているかどうか確認してみてください。
6.2. venvとは#
複数のプロジェクトで異なるサードパーティ製パッケージを利用することはよくあります。その場合、プロジェクトごとにインストールするパッケージを切り替えられると便利です。
venvはプロジェクトごとに隔離されたPythonの仮想環境(Virtual Environments)を作成します。
コラム: condaの場合
Anaconda を使っている場合は pip 、 venv の代わりに Conda というパッケージ管理ツールを使用します。
condaではそれぞれ以下のコマンドで、サードパーティ製パッケージのインストール、環境の作成、有効化、無効化が行えます。
$ conda create --name env python # 環境を作成
$ source activate env # 環境の有効化
(env) $ conda install requests # パッケージのインストール
(env) $ source deactivate # 環境の無効化
6.2.1. venv環境の作成#
venv環境を作成します。
作成には venv
モジュールを使用します。引数には作成する環境の名前を指定します。
$ python3 -m venv env
$ ls
env/
Windowsの場合はスクリプトの実行権限を与えます(Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
)。このコマンドは一度実行したら、再び実行する必要はありません。
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
> python -m venv env
> ls
env/
現在のフォルダに、envというディレクトリが作成されます。
6.2.2. venv環境の有効化#
作成した venv
環境を有効化(activate)します。
そのためにはbashスクリプトの env/bin/activate
を source
コマンドで実行します(リスト 6.6 )。
Windowsの場合はスクリプトを実行します( リスト 6.7 )。
$ source env/bin/activate
(env) $
> env\Scripts\Activate.ps1
(env) >
venv
環境を有効化すると、プロンプトの前に環境名(ここでは env
)が表示されます。そして、環境変数 PATH
の先頭にenv/binが追加され、 venv
環境のPythonが実行されるようになります。
ここでは、 pip
コマンドで requests
(HTTPクライアントのパッケージ)をインストールします(リスト 6.8)。
(env) $ pip install requests
(env) $ python
>>> import requests
>>> # requestsがインポートできる
requests
が env/lib/python3.10/site-packages
配下にインストールされます。
またPythonパッケージの中にはコマンドとして実行可能なファイルが含まれている場合があります。それらのファイルは env/bin
配下にインストールされます。
6.2.3. venv環境の無効化#
venv
環境を無効化(deactivate)するには、 deactivate
コマンドを実行します(リスト 6.9)。
無効化した後、元の環境で requests
をインポートするとエラーとなり、 venv
環境でのみ requests
がインストールされていることがわかります。
(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 がよく知られている名前なので、他の人にパッケージの一覧が入っているという意図が伝わりやすいです。
(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
プロジェクトの他のメンバーは、ソースコードをダウンロードした後、以下の手順で仮想環境に同じパッケージをインストールします。
$ 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環境にパッケージをインストールして、スクレイピングを行う方法を説明します。