0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

閉域ネットワーク環境でPythonパッケージを使う方法

Posted at

はじめに

今回インターネット接続ができない端末に対して、Pythonのパッケージを導入する事があったので、その方法を整理します。
インターネットに接続できて、パッケージがダウンロード可能な端末も1台必要です。

環境

  • python 3.13.5
  • pip 25.1.1
  • WindowsServer2022(パッケージをインストールしたい端末)
  • インターネット接続ができる別端末

結論

インターネットに繋がる端末でインストール先の環境のパッケージを.whlファイルとしてダウンロードして、該当端末に移したあとに、pip installでインストールすることでパッケージが使えるようになります。

.cmd
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が実行される環境とは異なる環境のパッケージをダウンロードすることができます。

download.cmd
py -m pip download ^
   --only-binary=:all: ^
   --platform macosx_10_10_x86_64 ^
   --python-version 27 ^
   --implementation cp ^
   SomePackage

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

環境を確認するために、インストール先の端末で以下のコマンドを実行します。

.cmd
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-versionimplementationが記載されていて、その他のオプションの値は書かれているまま指定していきます。

download.cmd
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つ目推奨です

  1. requirements.txtを作成してそれを下にインストール
  2. whlファイルを指定してインストールする

1.requirements.txtを記述しインストールする方法

ダウンロードされた.whlファイルを見て、パッケージ名とバージョン情報を requirements.txt に記述します。

今回は以下のようになりました

requirementx.txt
certifi==2025.8.3
charset-normalizer==3.4.3
idna==3.10
requests==2.32.5
urllib3==2.5.0

以下のコマンドを実行してパッケージをインストールできます。

install.cmd
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としてもワイルドカードは解釈されずにファイル名として扱われてしまうので適当にループを書いてすべてのパッケージをインストールする必要があります。

install.cmd
for /f %i in (*.whl) do pip install --no-deps "%i"

おわりに

今回はオフラインの端末にPythonのパッケージをインストールする方法について整理しました。
少しでも参考になれば幸いです。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?