はじめに
今回インターネット接続ができない端末に対して、Pythonのパッケージを導入する事があったので、その方法を整理します。
インターネットに接続できて、パッケージがダウンロード可能な端末も1台必要です。
環境
- python 3.13.5
- pip 25.1.1
- WindowsServer2022(パッケージをインストールしたい端末)
- インターネット接続ができる別端末
結論
インターネットに繋がる端末でインストール先の環境のパッケージを.whl
ファイルとしてダウンロードして、該当端末に移したあとに、pip install
でインストールすることでパッケージが使えるようになります。
rem プラットフォームや実行環境の指定(以下はpip documentationから)
py -m pip download ^
--only-binary=:all: ^
--platform macosx_10_10_x86_64 ^
--python-version 27 ^
--implementation cp ^
SomePackage
rem --- ダウンロードした.whlファイルをなんとかして移動 ---
rem requirements.txtを記述してから...
pip install --no-index --find-links=./whls -r requirements.txt
rem もしくは1ファイルずつ依存関係を無視してインストール
for /f %i in (*.whl) do pip install --no-deps "%i"
ダウンロード&インストールの手順
パッケージをダウンロドするためには pip download
を使用します。
ここで --platform
, --python-version
, --implementation
, --abi
+ --only-binary=:all:
のオプションをつけることで、pipが実行される環境とは異なる環境のパッケージをダウンロードすることができます。
py -m pip download ^
--only-binary=:all: ^
--platform macosx_10_10_x86_64 ^
--python-version 27 ^
--implementation cp ^
SomePackage
インストール先の環境確認
環境を確認するために、インストール先の端末で以下のコマンドを実行します。
pip debug
上記コマンドを実行することによって、ダウンロードの際にオプションで指定するplatform, python-version, implementation, abiの4つの項目の値を確認できます。
出力は今回確認する部分だけ抜粋させていただきます。
( 省略 )
Compatible tags: 45
cp313-cp313-win_amd64
cp313-abi3-win_amd64
cp313-none-win_amd64
cp312-abi3-win_amd64
cp311-abi3-win_amd64
cp310-abi3-win_amd64
cp39-abi3-win_amd64
cp38-abi3-win_amd64
cp37-abi3-win_amd64
cp36-abi3-win_amd64
...
[First 10 tags shown. Pass --verbose to show all.]
タグの書式は {python tag}-{abi tag}-{platform tag}
と、パッケージを動かすために必要な実装やバージョン、プラットフォームや要求されているPython ABIがハイフン区切りで記述されています。
ダウンロードのコマンドを記述する
インストール先の環境を確認したら、その情報を元にインターネット接続できる端末でダウンロードのためのコマンドを実行していきます。
今回は上述したCompatible tagsの上から3つくらいを並べてとりあえずダウンロード実行してみるという方法で記述します。
python tag
にはpython-version
とimplementation
が記載されていて、その他のオプションの値は書かれているまま指定していきます。
py -m pip download ^
--only-binary=:all: ^
--platform win_amd64 ^
--python-version 313 ^
--implementation cp ^
--abi cp313 --abi abi3 --abi none ^
SomePackage
このコマンドを実行すると、今作業しているディレクトリに .whl
ファイルがダウンロードされます。
試しに SomePackage -> requests
を実行するとrequests含め5つの.whlファイルがダウンロードされました。
あとはダウンロードした.whlファイルを頑張って該当する端末へ移してインストールします。
インストール
インストールは一応2パターン紹介しますが1つ目推奨です
- requirements.txtを作成してそれを下にインストール
- whlファイルを指定してインストールする
1.requirements.txtを記述しインストールする方法
ダウンロードされた.whl
ファイルを見て、パッケージ名とバージョン情報を requirements.txt
に記述します。
今回は以下のようになりました
certifi==2025.8.3
charset-normalizer==3.4.3
idna==3.10
requests==2.32.5
urllib3==2.5.0
以下のコマンドを実行してパッケージをインストールできます。
pip install --no-index --find-links=./whls -r requirements.txt
- --no-indexでオンラインリポジトリを見に行かなくなります
- --find-linksはローカルのフォルダ.whlsから探しに行きます
requirementx.txtを記述する手間はあるのですが、ばらまくときとか pip freeze
したときとかきれいになるので私はこちらの方法で今回インストールを行いました。
2. whlファイルを指定してインストールする方法
pip install --no-deps SomePackage.whl
-
--no-deps
のオプションをつけると依存関係を無視して、指定したパッケージをインストールしてくれます。
この方法だと pip freeze
の結果が requests @ file:///C:/Users/.../requests-2.32.5-py3-none-any.whl#sha256=2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6
のようになるのであんまり好きじゃないです。
また、複数の.whl
ファイルを同時にインストールするときは、 pip install --no-deps *.whl
としてもワイルドカードは解釈されずにファイル名として扱われてしまうので適当にループを書いてすべてのパッケージをインストールする必要があります。
for /f %i in (*.whl) do pip install --no-deps "%i"
おわりに
今回はオフラインの端末にPythonのパッケージをインストールする方法について整理しました。
少しでも参考になれば幸いです。