私は一日中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-links
とdependency_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'
],
...
私は何か間違ったことをしましたか、これはサポートされていませんか?
依存関係としての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依存関係を使用できます。
詳細な説明ありがとうございます、本当にありがとうございました。
このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。
最も参考になるコメント
依存関係としてのPEP508URL要件はサポートされていません。
はい。 下記参照。
pyproject.toml
は、ビルド時の依存関係を指定し、ツールの構成を行う場所としてのみ機能します。 それ以外は、使用しているツールによって実装されます。はい。 それが#4187の背後にある全体的な動機です。
PyPIからパッケージをインストールしてpipが任意のWebURLに到達することを望まないため、依存関係でPEP 508URL要件を使用する機能を無効にしました。 基本的に、
pip install spam
は、pipがPyPI以外のものに到達するようにするべきではありません。#4187で現在提案されている解決策は、パッケージが実際にPyPIから直接インストールされているときにのみURL依存関係をブロックするようにブロック条件を変更することです。これにより、他のインストールモードでもPEP 508URL依存関係を使用できます。