インターネット接続なしで Python パッケージをインストールする
インターネットに接続できない環境向けに、別のマシンで pip download したパッケージを転送し、--find-links と --no-index でオフラインインストールする方法。
インターネットに接続できないマシンに Python パッケージをインストールするには、別の場所で先にダウンロードしてから、その結果を転送する必要があります。この作業は 3 つのステップに分かれます。
オンライン環境でパッケージをダウンロードする
まず、インターネットに接続できる環境で pip download コマンドを使い、必要な Python パッケージをダウンロードします。
pip install boto3pip freeze > requirements.txtpip download --dest packages -r requirements.txtこれにより、パッケージとその依存関係が packages という名前のディレクトリに保存されます。
パッケージをオフライン環境へ転送する
ダウンロードしたパッケージをアーカイブファイルに圧縮し、scp のような安全な方法で、インターネットに接続していない対象環境へ転送します。
tar cvzf packages.gz ./packages# Transfer the archive to the offline environmentオフライン環境でパッケージをインストールする
転送が完了したら、アーカイブを展開し、--find-links と --no-index オプションを付けた pip install でパッケージをインストールします。
tar xvzf packages.gzpip install -r requirements.txt --find-links packages --no-index--find-links オプションはパッケージが格納されているローカルディレクトリを指定し、--no-index は pip が PyPI のインデックスへアクセスしようとするのを防ぎます。
まとめ
接続されたマシン上で pip download を使ってパッケージをダウンロードし、オフラインのマシン上で --find-links と --no-index を使ってインストールすれば、インストール時にネットワークアクセスを一切必要とせずに pip install -r requirements.txt を成功させられます。鍵になるのはこの 2 つのフラグの組み合わせです。--find-links は、ローカルの packages ディレクトリを配布物のソースとして扱うよう pip に指示し、--no-index は PyPI への到達を一切試みないようにします。前段の pip download ステップは、それを実行したマシンのプラットフォーム、Python バージョン、アーキテクチャに一致するホイールを取得します。そのため、オンライン環境とオフライン環境が異なる場合は、ダウンロード時に --platform、--python-version、--implementation の各フラグ(および --only-binary=:all:)を明示的に指定しておくことで、オフラインの対象環境では使えないホイールを取得してしまう事態を避けられます。
Related posts
PythonでOPC UAの変数ノードを監視する
opcua-asyncioを使ってOPC UAの変数ノードの変更を購読し、ポーリングではなくサーバーからのプッシュ更新にクライアントが反応するようにします。
TesseractとPytesseractによる日本語PDFのOCR処理
Tesseract OCR v4とpytesseractを使ってPDFから日本語テキストを抽出し、出力をきれいにするために必要な正規化処理についても扱います。
EC2上でProxy.pyを軽量HTTPプロキシとして動かす
Proxy.pyにはそれ自体の認証機構がないため、EC2インスタンス上で動かしつつSSHトンネル経由で安全にアクセスする方法です。

保守性とテストしやすさのための依存性注入
密結合なTypeScriptクラスを、モックでテストできるクラスへとリファクタリングする。給与計算機、システムクロック、SESを対象に依存性注入を適用する。
Jasmine でモックオブジェクトのプロパティをスパイする
モックオブジェクトのプロパティをスパイする際に発生する Jasmine の "already been spied upon" エラーを、Object.getOwnPropertyDescriptor で回避する方法。
