ローカルインポートでの「pip install」(オフライン端末へ)
インターネット接続がないオフライン端末への「pip install」
オンライン端末(インターネット環境あり)
で、requirements.txtの内容で、pip installしたバイナリをダウンロードしておく
「wheels」という名前のフォルダにダウンロード
その後、「wheels」フォルダを丸ごと、USBメモリなどで、
オフライン端末(インターネット環境なし)
で、コピーして、
その「wheels」フォルダから読み込む形で、「pip install」する方法が記述されています。
前提として、
などで、ダウンロードしたものをオフライン端末側に持って行って
Python本体をインストールしておく必要あります
そのときに、
オンライン端末側で、pip installしたバイナリをダウンロードしておく
「wheels」という名前のフォルダにダウンロードの行為を行うときに、
見えてるPython本体のバージョン
と、
オフライン端末側で、「wheels」という名前のフォルダから読み込み時に、
見えてるPython本体のバージョンは、あわせておくほうがよい。
このとき、
★★★★★★★★★★★★★★★★★★★★★★
オンライン側が開発機で、miseでインストールしたPython本体でも、
オフライン側がターゲット機で、普通にインストールしたPythonの本体の
構成でもPythonの本体のバージョンが一致なら、問題なしです
★★★★★★★★★★★★★★★★★★★★★★
miseについては、こちら。
一応、wheelsフォルダには、バイナリイメージが入るため
OSや、x64などのCPUアーキテクチャは一致している必要あり
オンライン端末と、オフライン端末では、
Windows 11 端末同士であれば、windows11内での細かなバージョン違いはOK
Python本体のインストール場所が違っていてもOK
追記、下記のオンライン端末側とオフライン端末側では、requirements.txtが一致が必要かと思います
requirements.txtの中身一致は必要かと思います。
原理的に、考えても、そうだと思う。
詳細は、複雑なので割愛するが、「pip」でなく「python -m pip」や「python3 -m pip」にしとかないとエラーになることがあるとのこと
実際にエラーが起きて調べた結果の解決策です
ですので、
後述の記載事項をすべて、書き直していきました
「pip」でなく「python -m pip」
WSL2では、
「pip」でなく「python3 -m pip」
こうすべきなのは、miseの本体を使ってる場合
pipの見るべきものがずれるため
そのズレを防止するため
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
それから、オンライン端末と、オフラインのうち、
いずれか、一方が、miseのpython本体にするならば、
両方、miseの本体にしなければ、うまくいかない
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
もし、オンライン、オフラインがどちらも、
普通にPCにインストールしただけのPythonで、Windows版ならば(WSL2はまた違う)
「python -m pip」、「python3 -m pip」にしなくても
「pip」でいいのである
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
<結論>
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
しかし、こんな条件、ややこしすぎるため
もう、シンプルに、Windows側も、WSL2側も
オンライン端末側も、オフライン端末側も、
miseでの本体のPythonに統一して、
pythonとpython3の違いとか、\と、/の違いはあるけど
そこだけは、受け入れ、後は、一択のやり方でする
としたほうが、シンプルでわかりやすいだろう
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
<結論:その2>
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
ただし、オフライン側に「mise」をインストールできない場合は、
オンライン側も、オフライン側も、本体のPythonは、PCに直インストールしたものを
使う方向性であわせて、その場合は、
「pip」でなく「python -m pip」
WSL2では、
「pip」でなく「python3 -m pip」
しないで、
普通に、「pip」を使った方式で、すればよい
その場合は、
後続の記述の
「python -m pip」になってるところは、「pip」
「python3 -m pip」になってるところは、「pip」
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
「pip」か「 「python -m pip」 or 「python3 -m pip」 」をどちらを使うべきか迷ったら
★★★★★★★★★★★★★★★★★★★★★★★★★
最終結論 追記)
★★★★★★★★★★★★★★★★★★★★★★★★★
「pip」か「 「python -m pip」 or 「python3 -m pip」 」
のどちらを使うべきか、迷ったら
pip --version
と
python -m pip --version
または
python3 -m pip --version
のうち、バージョンが高い方法を
選べばよいのではないか
★★★★★★★★★★★★★★★★★★★★★★★★★
も、参考に
オンライン端末側
オンライン端末(インターネットにつながる端末)で、
python -m pip download -r requirements.txt -d wheels
WSL2では、
python3 -m pip download -r requirements.txt -d wheels
別にvenvに入らなくても、どこでも、
どのフォルダでも、pipコマンドさえ使える場所で、
requirements.txtがあれば実行可能。
この時に、オンライン端末でこのコマンドを打ち込むフォルダで
python3 -V( windows なら、python -V か)を打ち込んだときに
表示されるバージョンと、
オフライン側の、それとバージョンが一致しておればよい
pythonの実態のパスまでが同じである必要はない
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★ 注意:.whlがPyPIに公開なしの理由で、.tar.gzが落ちてきたものは、.whlを作る必要あり
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
requirements.txt
の中にあるものの中で、PyPIに.whlが公開されていないことが原因で
*.whlがダウンロードされず、代わりに
.tar.gzがダウンロードされたものがありました。
そういうものがないかを、wheelsフォルダの中を見て、確認する必要があります。
もし、そういうものがあれば、下記のコマンドで、
個別に、それだけ、
.tar.gzを元にして、.whlを作成する必要があります。
なぜなら、
requirements.txt
に定義がある分、全て、.whlがある状況でないと、
オフライン端末側で取込インストール時にエラーになってしまうからです
例として、
odfpy-1.4.1.tar.gz
というのが、
一個だけ、それだった事象が起きた。
( 複数あるなら、その分、1個1個、対応の必要あり )
Windows(Git Bash)
python -m pip wheel odfpy==1.4.1 -w wheels
WSL2
python3 -m pip wheel odfpy==1.4.1 -w wheels
なお、
odfpy==1.4.1
の部分は、requirements.txt から該当に記述をコピーしてくること。
にて、
odfpy-1.4.1-py2.py3-none-any.whl
が作成されました。
このようにして、PyPIにwhl版が無いという理由で、
*.tar.gzが落ちてきたものがあるかどうかを確認し
もし、あれば、有る分、一個一個、上記の要領で
.whlを作って、
requirements.txt にある分、すべて、.whlがありますよ
状態にしてから、そのwheelsをオフライン端末側に持って行くべきなのである。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
オフライン端末側
USBメモリなどで、wheelsフォルダ丸ごとコピーしてきて
python -m venv .venv
( WSL2の場合は、python3 -m venv .venv )
「.venv」は仮想環境のフォルダ名なのでアプリで決めたフォルダ名
特にこだわりなければ、「.venv」でよいと思うが、決まった名前があればそれに従う。
.venv\Scripts\activate (windowsの直の場合)
> ちなみに、
> Git bashなら source .venv\Scripts\activate
> WSL2なら source .venv\bin\activate
にて、仮想環境にactivateした後、
python -m pip install --no-index --find-links=.\wheels -r requirements.txt
( Git bash、WSL2の場合は、--find-links=./wheels )
WSL2では、
python3 -m pip install --no-index --find-links=./wheels -r requirements.txt
--no-indexは、PyPIからのダウンロードをしないという意味
Discussion