web-dev-qa-db-ja.com

インターネットなしでpythonパッケージをインストールし、ソースコードを.tar.gzおよび.whlとして使用する

インターネットなしでいくつかのpythonパッケージをインストールしようとしています。

For ex : python-keystoneclient

そのために、パッケージを https://pypi.python.org/pypi/python-keystoneclient/1.7.1 からダウンロードし、サーバーに保存しました。

ただし、tar.gzおよび.whlパッケージのインストール中に、インストールは最初にインストールされる依存パッケージを探しています。サーバーにインターネット接続がないため、失敗します。

例:python-keystoneclientには、次の依存パッケージがあります

stevedore (>=1.5.0)
six (>=1.9.0)
requests (>=2.5.2)
PrettyTable (<0.8,>=0.7)
oslo.utils (>=2.0.0)
oslo.serialization (>=1.4.0)
oslo.i18n (>=1.5.0)
oslo.config (>=2.3.0)
netaddr (!=0.7.16,>=0.7.12)
debtcollector (>=0.3.0)
iso8601 (>=0.1.9)
Babel (>=1.3)
argparse
pbr (<2.0,>=1.6)

上記のリストからパッケージを1つずつインストールしようとすると、ネストされた依存関係が再度検索されます。

Python-keystoneclientのようなpythonモジュールをインストールするための依存パッケージを一覧表示する方法はありますかALL.

29
srinath

これは私がこのケースを処理する方法です:

インターネットにアクセスできるマシンで:

mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps

次に、インターネットにアクセスできない宛先マシンにtarファイルを移動し、次を実行します。

tar xvfz keystone-deps.tgz
cd keystone-deps
pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index
59

たとえば、requirements.txtから多数の依存関係をインストールする場合は、次のようにします。

mkdir dependencies
pip download -r requirements.txt -d "./dependencies"
tar cvfz dependencies.tar.gz dependencies

そして、dependencies.tar.gzをインターネットのないマシンに転送したら、次のようにします。

tar zxvf dependencies.tar.gz
cd dependencies
pip install * -f ./ --no-index
9
rouble

職場でも同様の状況があり、生産マシンはインターネットにアクセスできません。したがって、すべてをオフラインおよびオフホストで管理する必要があります。

これが私がさまざまな成功を収めて試したことです。

  1. basket これは、インターネットに接続されたホストで実行する小さなユーティリティです。パッケージをインストールしようとする代わりに、パッケージをダウンロードし、それ以外に必要なものはすべてディレクトリにインストールする必要があります。次に、このディレクトリをターゲットマシンに移動します。長所:非常に簡単で使いやすい、サーバーの問題はありません。設定するポートはありません。短所:本物のショートッパーはありませんが、最大の問題は、バージョンの固定を尊重しないことです。常に最新バージョンのパッケージがダウンロードされます。

  2. ローカルpypiサーバーを実行します。 pypiserver および devpi を使用しました。 pypiserverは、インストールとセットアップが非常に簡単です。 devpiにはもう少し手間がかかります。両方とも同じことを行います-実際のpypiのプロキシ/キャッシュとして機能し、自家製パッケージのローカルpypiサーバーとして機能します。 localshop は、私が探していた頃にはなかった新しいもので、同じ考えを持っています。そのため、インターネットに制限されたマシンはこれらのサーバーに接続し、実際のリポジトリをキャッシュおよびプロキシできるようにインターネットに接続します。

2番目のアプローチの問題は、Pythonパッケージのリポジトリ全体への最大の互換性とアクセスは得られますが、ターゲットマシンにすべての依存関係がインストールされていることを確認する必要があることです(たとえば、データベースドライバーおよびビルドツールチェーンのヘッダー)。さらに、これらのソリューションは、pypi以外のリポジトリ(たとえば、githubでホストされているパッケージ)には対応していません。

ただし、2番目のオプションは非常に優れているため、絶対にお勧めします。

最終的に、互換性の問題とライブラリに対処することにうんざりして、サーバーのサーカス全体を商業的にサポートされているドッカーコンテナーに移行しました。

これは、事前に構成されたすべてのものを出荷することを意味し、実際に生産マシンにインストールする必要はなく、これは私たちにとって最も頭痛のないソリューションです。

Pypiリポジトリをローカルのdockerイメージサーバーに置き換えました。

7
Burhan Khalid

pipdeptreeは、virtualenvにインストールされたpythonパッケージを依存関係ツリーの形式で表示するためのコマンドラインユーティリティです。それを使うだけです: https://github.com/naiquevin/pipdeptree

0
moveax3