まず、インターネットにアクセスできないサーバーに 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.gz
ansible を正常にインストールできました。
ここで質問です。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 install
VCS リンク (Git、Mercurial、Subversion、Bazaar など) との組み合わせの例が記載されています。
参考文献
答え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>