すべての依存関係を含む Python パッケージを pip3 経由でオフラインでインストールするにはどうすればよいですか?

すべての依存関係を含む Python パッケージを pip3 経由でオフラインでインストールするにはどうすればよいですか?

まず、インターネットにアクセスできないサーバーに Ansible をインストールすることに成功しました。しかし、私のアプローチが正しいかどうか疑問に思っています。

まず、 経由で必要な依存関係をダウンロードしましたpip3

pip3 download ansible -d .

その結果、次のファイルがダウンロードされました。

ansible-2.9.4.tar.gz                          
cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl  
MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl  
PyYAML-5.3.tar.gz
cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl  
Jinja2-2.11.1-py2.py3-none-any.whl                
pycparser-2.19.tar.gz                              
six-1.14.0-py2.py3-none-any.whl

これらのファイルをリモートコンピュータで利用できるようにしたので、

pip3 install ansible-2.9.4.tar.gz

ansibleをインストールします。

その結果、次のエラーが発生しました。

Processing ./ansible-2.9.4.tar.gz
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 
'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7f00726f9ef0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /simple/jinja2/

そこで、Jinja2 を手動でインストールしてみました。

pip3 install jinja2-2.11.1-py2.py3-none-any.whl

しかし、これもうまくいきませんでした。

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection
 broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7fd303a23940>: Failed to establish a new connection: [Errno -2] Name or service not known',)': 
/simple/markupsafe/

Markupsafe をインストールしたら、Jinja2 もインストールできました。最終的に、pip3 install ansible-2.9.4.tar.gzansible を正常にインストールできました。

ここで質問です。pipダウンロードしたファイルを使用して依存関係をインストールするように指示する方法はありますか? または、すべての依存関係をオフラインで特定の Python パッケージをインストールするより簡単な方法はありますか?

ご協力ありがとうございました。よろしくお願いいたします。yabberth

答え1

pipダウンロードしたファイルを使用して依存関係をインストールするように指示する方法はありますか? または、すべての依存関係をオフラインで特定の Python パッケージをインストールするより簡単な方法はありますか?

あなたが探しているのは--インデックスなしそして--リンクを検索オプションpip install。公式のpip installオプションドキュメントによると:

--インデックスなし

パッケージ インデックスを無視します (代わりに --find-links URL のみを参照します)。

-f, --リンクを検索

html ファイルへの URL またはパスの場合は、アーカイブへのリンクを解析します。ローカル パスまたはディレクトリの file:// URL の場合は、ディレクトリ リストでアーカイブを検索します。

これらのオプションを使用すると、たとえばローカル インストールを実行できます。

pip3 install --no-index --find-links /some/path <package name>

またはリモートインストール(例:HTTP経由):

pip3 install --no-index --find-links http:\\remotes\server <package name>

ansibleあなたの場合、パッケージ名に次のように単純に使用できるはずです。

pip3 install --no-index --find-links /some/path ansible

pip3 install --no-index --find-links http:\\remotes\server ansible

必要に応じて完全なファイル名を使用することもできます。

pip3 install --no-index --find-links /some/path ansible-2.9.4.tar.gz

pip3 install --no-index --find-links http:\\remotes\server ansible-2.9.4.tar.gz

必要な依存関係がすべて同じ場所 (元の質問に記載されている場所) にあると仮定すると、それらは通常どおりインストールされるはずです (つまり、各依存関係を手動で順番にインストールする必要はありません)。


要件

別のオプションとしては、適切な依存関係のインストール順序で要件ファイルを作成することが挙げられます。例:

例: requirements.txt

/path/to/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
/path/to/Jinja2-2.11.1-py2.py3-none-any.whl 
/path/to/ansible-2.9.4.tar.gz
# ...                          

次に、eg を使用してpip3 install -r requirements.txtリストされたパッケージをインストールします。eg HTTP リンクを再度使用することもできます。

例: requirements.txt

http:\\remotes\server\MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
http:\\remotes\server\Jinja2-2.11.1-py2.py3-none-any.whl 
http:\\remotes\server\ansible-2.9.4.tar.gz
# ... 

ここでの明らかな欠点は、あるパッケージが別のパッケージに依存していると仮定すると、特定のパッケージをインストールする順序をあらかじめ知っておく必要があることです。


その他のURLオプション

また、以下もご覧ください。バージョン管理システム (VCS) セクションpip installドキュメントには、 pip installVCS リンク (Git、Mercurial、Subversion、Bazaar など) との組み合わせの例が記載されています。


参考文献

ピップインストール

pip インストール (オプション)

答え2

完全なミラーが必要ではないので、python-pypi-ミラー:

1- インターネット接続のあるサーバーに pip を使用して python-pypi-mirror をインストールします。

2- このサーバーに http.server Python モジュールをインストールします。

3- pip パッケージをサーバーするディレクトリを作成します。

4- python-pypi-mirror を使用して、最近作成され、http サーバーとして公開されたディレクトリに必要なパッケージをダウンロードします (すべての依存関係が含まれます)。

5- 必要なパッケージをリモートでインストールします。

 pip3 install --trusted-host <http_server> -i http://<http_server>:<http.server_default_port>/simple <package_name>

必要な指示はすべてここにあります

関連情報