web-dev-qa-db-ja.com

setup.pyのextras_require()とinstall_requires()の違いは?

Setup.pyでextras_require()install_requires()の違いを理解しようとしていますが、取得できませんでした。両方ともPython依存関係のインストールに使用されますが、両者の違いは何ですか?

26
Harish R

setuptools documentation によると、

extras_require
「extras」(プロジェクトのオプション機能)の名前を、それらの機能をサポートするためにインストールする必要のある他のディストリビューションを指定するストリングまたはストリングのリストにマッピングする辞書。

そして

install_requires
これがインストールされているときに、他のどのディストリビューションをインストールする必要があるかを指定する文字列または文字列のリスト。

「Extras」の宣言(独自の依存関係を持つオプション機能) のセクションでこれについて詳しく説明します。

プロジェクトに「推奨」依存関係がある場合がありますが、これはプロジェクトのすべての使用に必要なわけではありません。たとえば、プロジェクトはオプションのPDF出力を、docutilsがインストールされている場合はreStructuredTextをサポートします。これらのオプション機能は「extras」このように、これらのオプション機能を必要とする他のプロジェクトは、install_requires

最大の違いは、extras_requireは必要に応じてのみインストールされます。

これらの要件は、関連するプロジェクト名の後に角括弧内に目的の「エクストラ」を含めることにより、別のパッケージが(直接的または間接的に)依存しない限り、自動的にインストールされません。 (または、EasyInstallコマンドラインの要件仕様にエクストラがリストされている場合。)

要約すると:

  • 依存関係がプロジェクトの実行にnecessaryである場合、install_requires。それらは常にインストールされます。
  • プロジェクトに依存関係を追加するオプション機能がある場合、それらの依存関係をextras_require。これらの依存関係は、ユーザーまたは別のパッケージによってその機能が呼び出されない限り、notはインストールされません。
25
user812786

公式の使用法はわかりませんが、extras_require()を使用して条件付き依存関係を指定します。

私の場合 -

_extras_require={":python_version<'3.5'": ["scandir"]}
_

理論的には、これはinstall_requires()自体を介して利用できるはずですが、setuptoolsのバージョンX.XX(どのバージョンが正しくなったかについてのいくつかの主張)を開始する場合にのみ機能します。

この記事ではそれをうまく説明しています: 条件付きPython依存関係

6
Jay