日記

日々のことと、Python/Django/PHP/Laravel/nodejs などソフトウェア開発のことを書き綴ります

pip を閉域環境で利用する

はじめに

今回は諸般の事情で pip というか、Python 環境を外部通信が不可能な環境で用意する必要が出てきたので、やり方を調べた時の備忘録です。

環境構築の流れ

作業順としては次のような流れです。

  • 外部通信可能な環境で、pypi からパッケージを取得する
  • 環境構築対象のサーバにモジュールをコピー
  • pip install を実行する

Python や pip 、virtualenv は、dpkg や rpm でがんばってインストールしてね☆

pypi からパッケージを取得からコピーまで

既に requirements.txt に必要なパッケージが書かれている状態で次のコマンドを実行します。

$ mkdir pip-cache
$ pip download \
    --only-binary=:all: \
    --platform manylinux1_x86_64 \
    --python-version 35 \
    --implementation cp \
    --abi cp35m \
    -d ./pip-cache \
    -r ./requirements.txt

platform や python-version、abi は必要に応じて変更してください。platform の指定は psycopg2 が対象パッケージにあったので、設定すべき値を見つけ出すのに苦労しました。詳しいオプションの説明は help や pip のドキュメントを参照のこと。

pip download — pip 9.0.1 documentation

pip-cache 以下にダウンロードしたパッケージが保存されるので、tar で固めてセットアップ先のサーバに持って行きます。

$ tar cf pip-cache.tar ./pip-cache
$ scp pip-cache.tar foo@example.com:~/
$ scp requirements.txt foo@example.com:~/

pip install の実行

セットアップ先に ssh ログインしたら、tar アーカイブを展開して pip install コマンドを実行します。

$ virtualenv ~/.virtualenv/pip-test -p /usr/bin/python35
$ source ~/.virtualenv/pip-test/bin/activate
$ tar xf pip-cache.tar
$ pip install \
    --no-index \
    --find-links=./pip-cache \
    -r ./requirements.txt

これでローカルの pip-cache からパッケージを探してインストールを行ってくれます。これでセットアップ先のサーバが外部ネットワークに出られなくても安心\(^o^)/

まとめ

普段の環境と違うと学ぶことは多いですね。

そして、ちゃんとアーカイブをダウンロードして用意する方法やオフラインからインストールする方法も用意されているものですね。pip ちゃんとしておる。