BETA

オフライン環境で pip install する。

投稿日:2020-07-11
最終更新:2020-07-11

はじめに

ネットワークに接続出来ない端末へ、ライブラリをインストールしたい場面ってありますよね。
そうした時は pip download を利用しますが、ダウンロードを Mac で行い、インストールは Windows といった場面で困ってしまいました。
その解決方法について分かりやすくまとまっている資料が無かったので知見を共有します。
なお、ダウンロードに使用したライブラリは psycopg2 なので、そちらを例に挙げます。

pip download について

pip download は、そのまま pip download -d pylib psycopg2-binary などとしてしまうと、ダウンロードを実行した環境に最適なものがダウンロードされてしまいます。
そのため、オプションでインストール先に合わせたものをダウンロードするよう指定しなければいけません。
今回の私のケースでは、Mac 版のモジュールが取れてしまうので、Windows 版のモジュールを取るようオプションで指定します。
pip download のドキュメント

指定するオプションは下記です。

  • --python-version
  • --platform
  • --implementation
  • --abi

この辺はドキュメントを読んでも、何の値を渡してやれば良いのか分かりません。

インストール先の環境を確認する

インストール先の端末には、勿論 Python 及び pip がインストールされているはずなので、その前提でお話します。

インストール先の端末で、下記のコードを叩くと pip download のオプションで何を指定してやればいいか分かります。
なお、下記のコードは Python3.7 前提です。

from pip._internal.utils.compatibility_tags import get_supported  
get_supported()  

この get_supported() ですが、Python のバージョンによってファイル名が変わります。
Python3.6 だと下記のコードで動きます。

from pip._internal.pep425tags import get_supported  
get_supported()  

もし get_supported() が見つからなかったら、pip フォルダ以下で grep 検索をかけてください。
ちなみに実行結果はこんな感じです。

[('cp37', 'cp37m', 'win_amd64'), ('cp37', 'none', 'win_amd64'), ('py3', 'none', 'win_amd64'), ('cp37', 'none', 'any'), ('cp3', 'none', 'any'), ('py37', 'none', 'any'), ('py3', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')]  

ハイフンで繋がった状態のものが出力されるパターンもあります。

pip download を実行する

情報が揃ったら pip download をオプションを付けて実行します。

pip download -d pylib --only-binary :all: --python-version 37 --platform win_amd64 --implementation cp --abi cp37m psycopg2-binary  

成功すると、オプションで指定した環境用の .whl ファイルが作成されます。
/pylib/psycopg2_binary-2.8.5-cp37-cp37m-win_amd64.whl

pip install を実行する

ダウンロードしたモジュールをオフライン環境に移動させます。
その先で、 pip install psycopg2_binary-2.8.5-cp37-cp37m-win_amd64.whl としてやればインストール完了です。

その他ハマる所

下記のエラーでも、オフライン環境でのインストールに失敗することがあるらしいです。

  • pip 及び setuptools, wheel のバージョンが低い
  • 依存関係のあるパッケージが見つからない

そうした問題に直面した場合は、下記を参考にしてみてください。
pip installをオフラインで行う

おわり

オプションに何を指定すれば良いのか分からなくてハマり、更に get_supported() が見つからなくてハマりと苦しんだので、そうした人の命が救われれば幸いです。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

気になった技術や、開発を楽にするテクニックなどについて書きます。 基本的に備忘録として記事を投稿します。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう