インターネット接続なしで Python パッケージをインストールする

インターネット接続なしで Python パッケージをインストールする

インターネットに接続できない環境向けに、別のマシンで pip download したパッケージを転送し、--find-links と --no-index でオフラインインストールする方法。

Takahiro Iwasa
3 min read

インターネットに接続できないマシンに Python パッケージをインストールするには、別の場所で先にダウンロードしてから、その結果を転送する必要があります。この作業は 3 つのステップに分かれます。

オンライン環境でパッケージをダウンロードする

まず、インターネットに接続できる環境で pip download コマンドを使い、必要な Python パッケージをダウンロードします。

Terminal window
pip install boto3
pip freeze > requirements.txt
pip download --dest packages -r requirements.txt

これにより、パッケージとその依存関係が packages という名前のディレクトリに保存されます。

パッケージをオフライン環境へ転送する

ダウンロードしたパッケージをアーカイブファイルに圧縮し、scp のような安全な方法で、インターネットに接続していない対象環境へ転送します。

Terminal window
tar cvzf packages.gz ./packages
# Transfer the archive to the offline environment

オフライン環境でパッケージをインストールする

転送が完了したら、アーカイブを展開し、--find-links--no-index オプションを付けた pip install でパッケージをインストールします。

Terminal window
tar xvzf packages.gz
pip 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:)を明示的に指定しておくことで、オフラインの対象環境では使えないホイールを取得してしまう事態を避けられます。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.