概要
オフライン環境で、pipパッケージをインストールするための手順です。
ポイント
手順を説明する前に、まずpipのパッケージの仕組みを説明します。
pipパッケージの種類
実は、pip パッケージは、pythonやOSの種類やバージョンによって何十種類もあります。
たとえば、numpyのパッケージは、以下29種類も提供されています。
これは、いったいどういうことなのでしょうか。
実は、pipにはパッケージング方法が複数定義されており、パッケージを公開する人が任意に選択できるのです。
pythonのコード(.py)をパッケージングする方式には、sdist方式とwheel方式があります。
sdist 方式
sdist方式は、ソースコードをzipファイルで圧縮したファイルを提供する方式です。
sdistパッケージは、pip install
実行時に自動的にコンパイルされます。このときコンパイル環境の設定
wheel 方式
wheelパッケージは、コンパイル済のパッケージです。
wheelパッケージの命名規則は次のように定義されています。
{distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl.
- distribution
- Distribution name, e.g. 'django', 'pyramid'.
- version
- Distribution version, e.g. 1.0.
- build tag
- Optional build number. Must start with a digit. A tie breaker if two wheels have the same version. Sort as the empty string if unspecified, else sort the initial digits as a number, and the remainder lexicographically.
- language implementation and version tag
- E.g. 'py27', 'py2', 'py3'.
- abi tag
- E.g. 'cp33m', 'abi3', 'none'.
- platform tag
- E.g. 'linux_x86_64', 'any'.
要するに、wheelはパッケージを作成した環境に依存します。
まとめ
どの種類のパッケージを公開するかは、パッケージ公開者が任意に選択できます。
pip install
コマンドは、次の優先順位でインストールするパッケージを選択します。
- 実行環境に適したwheelパッケージ
- sdistパッケージ
pip downloadの仕組み
pipにはパッケージをインストールせず、ダウンロードだけするサブコマンドpip download
が用意されています。
このコマンドはデフォルトでは、実行した環境に適したパッケージをダウンロードします。
たとえば、Ubuntu 20.04、python3.8の環境でnumpyをダウンロードすると、
$ pip download -d dest numpy
Downloading .../numpy/1.21.2/numpy-1.21.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.8 MB)
|████████████████████████████████| 15.8 MB 92.1 MB/s
Saved ./dest/numpy-1.21.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Successfully downloaded numpy
自動的に、numpy-1.21.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
がダウンロードされます。
異なる実行環境用のパッケージをダウンロードする場合には、オプションで適切に指定する必要が有ります。
たとえば、Mac OSX用のpython2.7のパッケージをダウンロードする場合には以下のようなコマンドを実行します。
python -m pip download \
--only-binary=:all: \
--platform macosx-10_10_x86_64 \
--python-version 27 \
--implementation cp \
SomePackage
このとき、Mac OSX用のパッケージがPyPIに存在しない場合、pip
コマンドはエラーを返します。
手順
TBD