105

私は、virtualenvでpipを使用して、いくつかのPythonライブラリをパッケージ化してインストールしています。

私がやっていることはかなり一般的なシナリオだと思います。私は、依存関係を明示的に指定できるいくつかのライブラリのメンテナです。私のライブラリのいくつかは、私が制御できない推移的な依存関係を持つサードパーティのライブラリに依存しています。

私が達成しようとしているpip installのは、私のライブラリの1つで、そのアップストリームの依存関係をすべてダウンロード/インストールすることです。私がpipのドキュメントで苦労しているのは、要件ファイルがそれ自体でこれを実行できるかどうか、またはそれらが実際にを使用するための単なる補足であるかどうかですinstall_requires

install_requiresすべてのライブラリで依存関係とバージョン範囲を指定し、要件ファイルのみを使用して競合を解決したり、本番ビルド用にそれらをフリーズしたりしますか?

私が架空の世界に住んでいるとしましょう(私は知っています、私は知っています)、そして私の上流の依存関係は単純であり、競合したり下位互換性を壊したりしないことが保証されています。ピップ要件ファイルを使用せざるを得ないのでしょうか、それとも単にpip / setuptools / distributionにすべてをインストールさせるのinstall_requiresでしょうか?

ここにも似たような質問がたくさんありますが、どちらか一方を使うときや、両方を一緒に使うときほど基本的な質問は見つかりませんでした。

4

4 に答える 4

70

私の哲学はinstall_requires、最低限必要なものを示すべきだということです。一部のバージョンが機能しないことがわかっている場合は、バージョン要件が含まれる場合があります。ただし、確信が持てない場合 (たとえば、依存関係の将来のリリースによってライブラリが破損するかどうかわからない場合) は、バージョン要件を持つべきではありません。

一方、要件ファイルは、機能することがわかっていることを示す必要があり、推奨されるオプションの依存関係が含まれている場合がありますたとえば、SQLAlchemy を使用して MySQL を提案し、MySQLdb を要件ファイルに入れることができます)。

つまり、要約install_requiresすると、機能しないことがわかっているものから人々を遠ざける一方で、要件ファイルは機能することがわかっているものに人々を導くことです。この理由の 1 つは、install_requires要件が常にチェックされ、パッケージのメタデータを実際に変更しないと無効にできないためです。そのため、新しい組み合わせを簡単に試すことはできません。要件ファイルは、インストール時にのみチェックされます。

于 2011-08-16T21:04:48.743 に答える
22

ここに私がsetup.pyに入れたものがあります:

# this grabs the requirements from requirements.txt
REQUIREMENTS = [i.strip() for i in open("requirements.txt").readlines()]

setup(
    .....
    install_requires=REQUIREMENTS
)
于 2013-03-11T14:26:55.913 に答える
15

Python Packaging User Guide には、このトピックに関するページがあります。読むことを強くお勧めします。

概要:

install_requiresパッケージが機能するために絶対にインストールする必要があるパッケージの依存関係をリストするためにあります。依存関係を特定のバージョンに固定することを意図したものではありませんが、たとえば、範囲は受け入れられますinstall_requires=['django>=1.8']。およびその他のツールinstall_requiresによって監視されます。pip install name-on-pypi

requirements.txt実行対象として選択できる単なるテキスト ファイルですpip install -r requirements.txt。次のように、すべての依存関係とサブ依存関係のバージョンを固定することを意図していますdjango==1.8.1。を使用して作成できますpip freeze > requirements.txt。(Heroku などの一部のサービスは自動的に実行pip install -r requirements.txtされます。)pip install name-on-pypiは を参照せずrequirements.txt、 のみを参照しinstall_requiresます。

于 2016-10-12T13:41:08.380 に答える
7

見る場所が 1 つしかないため、私はsetup.pyandのみを使用します。install_requires要件ファイルを持つのと同じくらい強力で、維持する重複はありません。

于 2013-11-13T16:43:14.463 に答える