Pip: ダイレクトURLPEP508のサポートとGitからのサブ依存関係のインストール

作成日 2018年07月03日  ·  3コメント  ·  ソース: pypa/pip

  • ピップバージョン:10.0.1
  • Pythonバージョン:3.7.0
  • オペレーティングシステム:macOS

私は一日中gitからのサブ依存関係のインストールについて読んでいましたが、それでも正しい解決策を見つけるのに苦労しています。

私のユースケース

既存のPythonライブラリ(PyPiで利用可能)をフォークし、アップストリームにマージされる可能性が低いいくつかの変更を追加しました。
私のプロジェクトのいくつかは、ライブラリフォークに依存しています。 以前はアプリケーションでしたが、Pipenvを使用してアプリケーションの依存関係を管理していました。そこでは、GitからPipfileに特定のブランチ/コミットをインストールするように簡単に指定できました。 私のアプリケーションは成長し、現在ライブラリに変換しています(PyPiで公開される予定はありません)。 ライブラリのGitからのサブ依存関係の問題を解決する必要があります。
私は少なくとも次の問題を読みました:#3610、#4187、#2124、#5384および他の多くの問題そしてもちろんPEP。 読み終えたときは、始めたときよりもさらに混乱していました。

pip 10でのPEP-508の実装で理解したことから、次を使用できるはずです。

setup(
    name='dmfigol',
...
    install_requires=[
        "requests",
        'smartsheet-python-sdk @ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3',
    ],
)

しかし、それは機能しません:

-> % pip install git+https://<private-git>/dmfigol/my-test-project.git
Collecting git+https://<private-git>/dmfigol/my-test-project.git
  ...
Direct url requirement (like smartsheet-python-sdk@ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3) are not allowed for dependencies

私の質問:
1)何か間違ったことをしましたか、それともサポートされていませんか?
2)サポートされていない場合、サポートされる予定ですか?
3)setup.pyからより宣言的なものに移行したい場合、 pyproject.tomlでも同様の構文を使用できることを正しく理解していますか?
4)を使用するために、今日のみ利用可能なソリューションです--process-dependency-linksdependency_linksでセクションsetup.py
5)アップストリームがPyPiのライブラリを1.3.4以降に更新し、フォークされたバージョン1.3.3を引き続き使用したい場合はどうなりますか?

ありがとうございました

UPD:このスレッドに遭遇した場合、#4187が実装されるまで現在機能しているソリューション:

setup(
    ...
    install_requires=[
        "smartsheet-python-sdk==10.1.3.3",
    ],
    dependency_links=[
        'https://github.com/dmfigol/smartsheet-python-sdk/archive/no-setuptools-scm.zip#egg=smartsheet-python-sdk-10.1.3.3'
    ],
...
auto-locked support

最も参考になるコメント

私は何か間違ったことをしましたか、これはサポートされていませんか?

依存関係としてのPEP508URL要件はサポートされていません。

サポートされていない場合、サポートされる予定ですか?

はい。 下記参照。

setup.pyからより宣言的なものに移行したい場合は、pyproject.tomlでも同様の構文を使用できることを正しく理解していますか?

pyproject.tomlは、ビルド時の依存関係を指定し、ツールの構成を行う場所としてのみ機能します。 それ以外は、使用しているツールによって実装されます。

setup.pyの--process-dependency-linksおよびdependency_linksセクションを使用するために現在利用可能な唯一のソリューションはありますか?

はい。 それが#4187の背後にある全体的な動機です。


PyPIからパッケージをインストールしてpipが任意のWebURLに到達することを望まないため、依存関係でPEP 508URL要件を使用する機能を無効にしました。 基本的に、 pip install spamは、pipがPyPI以外のものに到達するようにするべきではありません。

#4187で現在提案されている解決策は、パッケージが実際にPyPIから直接インストールされているときにのみURL依存関係をブロックするようにブロック条件を変更することです。これにより、他のインストールモードでもPEP 508URL依存関係を使用できます。

全てのコメント3件

私は何か間違ったことをしましたか、これはサポートされていませんか?

依存関係としてのPEP508URL要件はサポートされていません。

サポートされていない場合、サポートされる予定ですか?

はい。 下記参照。

setup.pyからより宣言的なものに移行したい場合は、pyproject.tomlでも同様の構文を使用できることを正しく理解していますか?

pyproject.tomlは、ビルド時の依存関係を指定し、ツールの構成を行う場所としてのみ機能します。 それ以外は、使用しているツールによって実装されます。

setup.pyの--process-dependency-linksおよびdependency_linksセクションを使用するために現在利用可能な唯一のソリューションはありますか?

はい。 それが#4187の背後にある全体的な動機です。


PyPIからパッケージをインストールしてpipが任意のWebURLに到達することを望まないため、依存関係でPEP 508URL要件を使用する機能を無効にしました。 基本的に、 pip install spamは、pipがPyPI以外のものに到達するようにするべきではありません。

#4187で現在提案されている解決策は、パッケージが実際にPyPIから直接インストールされているときにのみURL依存関係をブロックするようにブロック条件を変更することです。これにより、他のインストールモードでもPEP 508URL依存関係を使用できます。

詳細な説明ありがとうございます、本当にありがとうございました。

このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価