このブログでは、以前にインターネットと疎通のない環境で Python パッケージをインストールする方法について書いたことがある。 具体的には Wheel でパッケージングした配布物を pip を使ってインストールしていた。
ただ、上記の記事にはひとつ問題点が残されていた。 そもそも Wheel をインストールするのに必要な pip を OS のパッケージ管理システム (yum) を通してインストールしていたことだ。 このやり方では、OS が提供するパッケージをそのまま使った場合には古いバージョンの pip しか使うことができない。 それに pip 自体も Python のパッケージなので、その管理が yum と pip というふたつのシステムにまたがることになる。
今回は、その解決策がわかったので紹介することにした。 ポイントは get-pip.py を pip コマンドの代わりとして使うことだ。
使った環境は次の通り。
$ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) $ uname -r 3.10.0-327.18.2.el7.x86_64
下準備
もし OS の提供する pip や setuptools がインストールされているときは、あらかじめ削除しておこう。
$ sudo yum remove -y python-setuptools python-pip
パッケージング (インターネットと疎通のあるホストで実行する)
ここからはインストールしたい Python パッケージなどのパッケージングを行う。
まずは、普段なら pip をインストールするために使う get-pip.py をダウンロードしておこう。
$ wget https://bootstrap.pypa.io/get-pip.py
次に Wheel を入れるディレクトリを作っておく。
$ mkdir wheelhouse
これは単に一箇所にまとめておくために作っている。
そして pip の Wheel ファイルを作って先ほど作ったディレクトリの中に入れる。
$ python get-pip.py wheel pip --no-cache-dir --download wheelhouse
上記の操作で get-pip.py を Python スクリプトとして実行している。 実は get-pip.py は一部の機能は絞られるものの pip コマンドの代わりとして使うことができる。
pip 以外にも、インストールしたい Python パッケージの例として requests の Wheel を用意しておこう。
$ python get-pip.py wheel requests --no-cache-dir --download wheelhouse
用意した Wheel ファイルは次の通り。
$ ls wheelhouse | grep \.whl$ pip-8.1.2-py2.py3-none-any.whl requests-2.10.0-py2.py3-none-any.whl setuptools-22.0.0-py2.py3-none-any.whl wheel-0.29.0-py2.py3-none-any.whl
上記のパッケージをインストールする (インターネットと疎通のない) ホストには、これらと先ほどダウンロードした get-pip.py を持っていく。
インストール (インターネットと疎通のないホストで実行する)
ここからは、先ほど作った Wheel ファイルをインストールする先の話。 本来はインターネットと疎通のないホストで実行することになるけど、ここではさっきビルドしたのと同じところでやってしまうことにする。
インストールにはパッケージングと同じように get-pip.py を使う。 get-pip.py は pip コマンドの代わりになるので、これを使って pip の Wheel パッケージをインストールする。 このとき --no-index オプションと --find-links オプションを併用することで、パッケージの解決が指定したディレクトリに閉じて実行される。
$ sudo python get-pip.py --no-index --find-links=wheelhouse pip
これで pip がインストールできた。
$ pip list | egrep "(pip|setuptools|wheel)" pip (8.1.2) setuptools (22.0.0) wheel (0.29.0)
pip さえインストールできてしまえばこちらのものなので、あとはふつうに pip コマンドで Wheel ファイルをインストールしていく。
$ sudo pip --no-index --find-links=wheelhouse requests
もちろん get-pip.py を使い続けても良いけどね。
無事に requests もインストールできた。
$ pip list | grep requests requests (2.10.0)
ばっちり。
まとめ
- Wheel ファイルにはブートストラップ問題がある
- Wheel ファイルをインストールするための pip をどうインストールするか
- この問題は get-pip.py を使って解決できる
- get-pip.py は pip コマンドの代わりとして使える
- pip の Wheel ファイルを get-pip.py を使ってインストールしよう
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログを見る