pip 利用ノート [obsolete]¶
本稿は <A tool for installing and managing Python packages>(pip) である pip に関する覚え書きである。すべての Python ユーザーはそうなのではないかと思うのだが、 Python のバージョンアップのたびに、サードパーティー製のパッケージもインストールし直すという、かなり面倒な作業が発生してしまう。インストーラー実行で即セットアップ終了となるなのは、あくまでも Python 本体でしかない。 NumPy や Sphinx 等は別途明示的なインストール作業が利用するパッケージの個数回必要となる。ハードコアな Python ユーザーはサードパーティー製パッケージを大量に持っているため、この作業の手間を軽減するのが重要になるのだ。それには pip というパッケージを利用するのがたいへん具合がよい。そこで、この覚え書きを残して、Python のアップグレードのときに見返そうというわけだ。
この pip 自体の入手方法について、少々動きがあったので付記しておく。
Python 3.4 以前は pip もまたサードパーティー製パッケージの一つであったのだが、うれしいことに 3.4 では Python 本体に同パッケージが同梱されている。
Scripts
フォルダー内に easy_install と pip があるので、後述するインストールの手順を飛ばして、いきなりその他のサードパーティー製パッケージのインストール作業に取り掛かることができる。
Note
OS
Windows XP Home Edition SP3
Windows 7 Home Premium x64 SP1
Windows 10 Home x64
WSL2
本稿において、利用した各パッケージのバージョンは次のとおり。
Python: 2.6.6, 2.7.3, 3.4.1, 3.5.0, 3.12.3
pip: 1.1, 1.5.6, 7.1.2, 8.1.1, 24.0
setuptools: 0.6c11
distribute: 未使用
virtualenv: 未使用
関連リンク¶
- pip
公式サイト。インストール方法から基本的な利用方法、応用等が文書化されている。
- easy_install
easy_install の公式サイト。
入手からインストールまで¶
Python 3.4 以前の環境では、手動でインストールする必要がある。以下に記す手順でインストールする。
事実関係
PyPI のトップページには easy_install の文字列は見当たらない。
pip 公式には、virtualenv 内部での pip の利用を推奨している。
virtualenv 環境内は自動的に pip がインストール済み状態だ。
そうではなく、「グローバルに」インストールする状況も当然ある。
そのような場合での pip のインストールの事前条件は、setuptools または distribute のどちらかがインストールされていること。
easy_install が環境にあれば、下記コマンドプロンプト入力で pip のインストールは実現できる。
$ easy_install pip
ソースコードを入手、解凍してコマンドプロンプトから
setup.py install
でインストールするやり方もある。
利用者ノート
easy_install でインストールした。まったく問題はなかった。
初歩的な利用例¶
easy_install から乗り換えたばかりなので、当面それほど凝った操作を必要とはしていない。次に挙げる操作だけ覚えておく。
pip は実行ファイル形式で $PYTHONHOME/Scripts
フォルダーに格納されている。
ヘルプ・バージョン表示¶
言うまでもないが help は目を通したほうがよい。コマンドラインオプションはそれほど多くはない。
$ pip help # ヘルプ表示
$ pip --version # バージョン表示
アンインストール¶
以前に easy_install でインストールしてしまったパッケージも pip でアンインストールできる。
$ pip uninstall simplejson
Uninstalling simplejson:
d:\python26\lib\site-packages\simplejson
d:\python26\lib\site-packages\simplejson-2.4.0-py2.6.egg-info
Proceed (y/n)?
インストール・アップグレード¶
一番重要なインストールのやり方について記す。
インストールしたいパッケージの形態によって、コマンドが異なる。いずれも重要な手順なので、すべて説明する。
インターネットからパッケージをダウンロードする¶
パッケージ名を指定して pip install
または pip install --upgrade
を実行する。この方法でインストールやアップグレードができれば、手間が最小で済む。
$ pip install --upgrade httplib2
Downloading/unpacking httplib2 from http://pypi.python.org/packages/source/h/httplib2/httplib2-0.7.4.tar.gz#md5=略
Downloading httplib2-0.7.4.tar.gz (106Kb): 106Kb downloaded
Running setup.py egg_info for package httplib2
Installing collected packages: httplib2
Found existing installation: httplib2 0.7.2
Uninstalling httplib2:
Successfully uninstalled httplib2
Running setup.py install for httplib2
Successfully installed httplib2
Cleaning up...
ダウンロード済みパッケージをインストールする¶
一部の手の込んだパッケージは、Visual C++ によるコンパイル処理などが含まれていたり、最新の Python のビルドに対応したバイナリーが公式に存在しなかったりする。このため、一般的な環境ではビルドできないことが考えられる。
そういう場合は親切な人がビルドした whl 形式のパッケージを別途ダウンロードして、 pip の引数にそのファイル名を指定することでインストールやアップグレードが実現できる。
以下、手順のイメージを擬似コードで表現する。
$ wget PyXYZ-x.y.z-cp35-none-win_amd64.whl
$ pip install PyXYZ-x.y.z-cp35-none-win_amd64.whl
編集可能パッケージをインストールする¶
オープンソースなプロジェクトによるパッケージについては、公開レポジトリーから作業コピーをローカルに作成し、そこをインストールする方法がある。
以下、手順のイメージを擬似コードで表現する。どのディレクトリーで作業をするかは
setup.py
が存在する階層でよいことが多い。
$ git clone https://github.com/XYZ/XYZ.git
...
$ cd XYZ/src/
$ pip install -e .
インストール済みパッケージをリスト¶
$ pip freeze
PIL==1.1.7
babel==0.9.6
coverage==3.5.1
docutils==0.8.1
以下略
余談だが、Google で pip freeze
を検索すると、他の Python プログラマーがどのようなパッケージを利用しているか垣間見える。
更新対象パッケージを調べる¶
最新のバージョンにアップグレードできるパッケージが何かあるか調べたい。こういう場合は list コマンドにオプション --outdated
を指定する。
次に示すように現在 Python 環境にある各パッケージのバージョン、最新バージョンの情報、および [wheel]
や [sdist]
などのインストール形態がリストされる。例えばパッケージ alabaster
は現在はバージョン 0.7.6 が .whl によりインストールされていて、更新すると 0.7.7 にアップグレードできることを示している。
$ pip list --outdated
alabaster (0.7.6) - Latest: 0.7.7 [wheel]
astroid (1.3.8) - Latest: 1.4.5 [wheel]
Babel (2.1.1) - Latest: 2.2.0 [wheel]
...
virtualenv (13.1.2) - Latest: 15.0.1 [wheel]
この出力を適宜整形してテキストファイルを保存して、pip install -U -r に指定して実際に更新作業を開始することを勧める。出力リストからある種のパッケージを手動で取り除いておかねばならない。例えば手作業でダウンロードしたい .whl からインストールしたいパッケージ、ローカルリポジトリーからインストールしたいものは別途アップグレードする必要がある。
インストール済みパッケージの情報を表示する¶
コマンド pip show を実行することで、インストール済みパッケージの情報を出力できる。これは当ノートの更新作業のときにしばしば実行する。
$ pip show matplotlib
---
Metadata-Version: 2.0
Name: matplotlib
Version: 1.4.3
Summary: Python plotting package
Home-page: http://matplotlib.org
Author: John D. Hunter, Michael Droettboom
Author-email: mdroe@stsci.edu
License: BSD
Location: d:\python35\lib\site-packages
Requires: python-dateutil, pytz, numpy, six, pyparsing
コマンドライン引数にパッケージ名を複数指定すると、情報を上記の書式で連続して出力する。
ファイルからパッケージリストを読み込んで各種操作する¶
pip freeze の出力をテキストファイルに出力しておき、次のようにすることができる。今の環境の site-packages
を別の環境で再現するとき等に利用できるというわけだ。
$ pip freeze > FILE
...
$ pip install -r=FILE
$ pip install --upgrade -r=FILE
パッケージの検索¶
例えば Amazon 関係のパッケージがあるのか知りたいとする。しかも PyPI で検索するよりも、コンソールで見たいような状況であれば pip search
の出番だ。
$ pip search amazon
AWSpider - Amazon Web Services web crawler
boto - Amazon Web Services Library
bellatrix - Bellatrix is a comprehensive set of tools to
automate the management of Amazon EC2 services.
以下略
設定ファイル¶
設定ファイルを特に意識せずに pip を利用してきた場合、それを用意するのならばどのパスになるのかを確認する手段がある:
$ pip config debug
env_var:
env:
global:
/etc/xdg/pip/pip.conf, exists: False
/etc/pip.conf, exists: False
site:
/home/USERNAME/.local/share/conda/envs/python-3.12/pip.conf, exists: False
user:
/home/USERNAME/.pip/pip.conf, exists: False
/home/USERNAME/.config/pip/pip.conf, exists: False
個人設定は XDG Base Directory 利用ノート に従いたいので、対象パスは
$XDG_CONFIG_HOME/pip/pip.conf
となる。何かのために空の pip.conf
を置いておくのが良いと思われる。
Note
ただし、pip は仮想環境のものを利用することが開発現場では通例であり、プロジェクトに対応する設定ファイルもまた、用意するとすれば、その仮想環境が関係するディレクトリーに置くことが普通だろう。
設定ファイルはサブコマンド節の集合で記述されており、各節はサブコマンドのオプション既定値を key-value 方式で列挙する。例えば、
$ pip config set download.timeout 10
を実行する。これはコマンド pip download
がオプション --download
を明示的に与えられずに実行する場合、これに対して値 10 が指定されたものとして動作するように構成するものだ。この指定は設定ファイルに書き込まれる:
$ pip config set download.timeout 100
Writing to /home/USERNAME/.config/pip/pip.conf
$ cat $XDG_CONFIG_HOME/pip/pip.conf
[download]
timeout = 100
まれに使うことになるかもしれない使用例¶
ミラーサイトを指定してインストール¶
PyPI のウェブサイトがダウンしているときには pip install 系操作は失敗する。サーバーが復旧するまで待てない場合、ミラーサイトを指定してインストールを試みることができる。
$ pip install --use-mirrors --mirrors=http://d.pypi.python.org/ sphinx
ミラーサイトのリストは次の通り。
Python のどこかのページに書いてあるが、ご本尊ごとサーバーがダウンしていたら読めないので、ここに転載する。本当はこれらを設定ファイルに書いておくのが作法。