1. ホーム
  2. python

[解決済み] pip requirements ファイルと setup.py の install_requires はいつ使い分けるのか?

2022-11-16 13:28:45

質問

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

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

私が実現しようとしているのは pip install を使用して、上流の依存関係をすべてダウンロード/インストールすることです。 pip のドキュメントで苦労しているのは、以下の場合/方法です。 要件ファイル はそれ自体でこれを行うことができるのか、それとも本当に install_requires .

私は install_requires を使用して依存関係とバージョン範囲を指定し、競合を解決するため、および/または本番ビルド用にそれらをフリーズするために要件ファイルを使用するだけでしょうか?

私が架空の世界に住んでいて (わかってる、わかってる)、私の上流の依存関係は単純で、決して衝突したり後方互換性を壊したりしないことが保証されていると仮定しましょう。私は、pip requirements ファイルをまったく使用しないか、または、pip/setuptools/distribute に、すべてのインストールを install_requires ?

ここには似たような質問がたくさんありますが、いつどちらかを使うか、あるいは両方を調和させて使うかといった基本的なものは見つかりませんでした。

どのように解決するのですか?

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

一方、要件ファイルでは、あなたが知っていることを示すべきです。 する を示すべきであり、あなたが推奨するオプションの依存関係を含むことができます。 例えば、あなたは SQLAlchemy を使っているが、MySQL を推奨しているので、MySQLdb を要件ファイルに入れるかもしれません)。

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