2017-08-01 18 views
3

私自身のPythonパッケージをパッケージ化しています。私はsetuptoolsとwheelを使ってそれをバンドルしてインストールする(開発モードとテストPyPIリポジトリの両方で)。PyPIに依存関係が存在する場合、Pipは依存関係リンクを無視してホイールからパッケージをインストールします

パッケージをインストールするためのすべてのpipコマンドは、--process-dependency-linksと一緒に使用されます。私は単純化のためにこのオプションを失望させます、そして、このオプションは暗黙のうちにここにあります。

依存関係の1つがPyPIで壊れていますが、開発リポジトリの問題が修正されました。私はどのコミットがこの問題を修正したのか知っています。私はそのSHA-1の合計を知っていますので、ダウンロードするtarballを知っています。だから私は私のsetup.pyファイルでこれをやった:私は(両方setuptoolsのとピップ経由)開発モードでパッケージをインストールしている間

... 
install_requires=[ 
    'hbmqtt>0.9.0' 
], 
dependency_links=[ 
    'https://github.com/beerfactory/hbmqtt/archive/f4330985115e3ffb3ccbb102230dfd15bb822a72.zip#egg=hbmqtt-0.9.1' 
], 
... 

、パッケージはgitのレポからダウンロードされます。それで私のパッケージのソースコードを配布することができます。

python setup.py sdist 
twine upload -s --sign-with gpg2 -r testpypi dist/<pkg-name>-<version>.tar.gz 

次に、私はPyPIからインストールできます。 --no-cache-dir--no-binary :all:オプションを同時に設定しないと(キャッシュからパッケージがインストールされていないことを確認するためにのみ--no-cache-dirが必要です)、最初のインストールはOKです。ピップはソースをダウンロードしてからホイールを作ります。依存関係の解決はうまくいって、すべてが正常に見えます。 Pipは適切なバージョンの(私の例では)HBMQTTパッケージをダウンロードしてインストールします。同時にピップはホイールを作り、それをキャッシュします。そのため、2番目のインストール(--no-binaryオプションが明白な理由と--upgrade-Iオプションなし)が満たされていないため、失敗します.pipはバージョン0.9.1のHBMQTTパッケージを見つけることができません。 PyPIのHBMQTTの最新バージョンは0.9.0です。したがって、wheelパッケージからインストールしようとすると、pipは依存関係リンクを処理しません。

ホイール(python setup.py bdist_wheel)を作成してテストPyPIにアップロードしようとしているときと同じことが起こります。 PyPIからのインストールは、ダウンロードされた(または私が作った)ホイールファイルと同様に失敗します。

ピップやホイールにトラブルがあると思われます。私はホイールからインストールする責任があるのか​​分かりません。

私の質問は今何をすべきか?この場合、どのような回避策が存在しますか?私は、HBMQTTリポジトリをforkし、PyPIがパッケージを壊すまで自分のパッケージを作ることしか考えていません。

+0

まあ、この動作は、パッケージがPyPIに存在しないケースにも及ぶことがわかりました。 – krautcat

答えて

0

--process-dependency-linkフラグを試しましたか?

https://github.com/pypa/pip/issues/4295

編集:申し訳ありませんが、私はあなたがそれをしようとしたことを今参照してください。私にとっては、これは問題を解決しましたが、それはあまり役に立ちません。

関連する問題