install_requiresかrequirementsか#

install_requires#

``install_requires``は:ref:Setuptools :file:`setup.py`のキーワードで、そのプロジェクトが正しく動作するために必要な最小限のものを指定するものです。プロジェクトが:ref:`pip`でインストールされた場合には、プロジェクトが依存するパッケージをインストールするのに用いられます。

例えば、プロジェクトがAとBに依存しているなら、``install_requires``は次のようになるでしょう:

install_requires=[
   'A',
   'B'
]

さらに、下限や上限がわかっているなら、それを示しておくことがベストプラクティスです。

例えば、あなたのプロジェクトが少なくともv1の'A'と少なくともv2の'B'を必要とするとわかっているなら、次のようになるでしょう:

install_requires=[
   'A>=1',
   'B>=2'
]

また、プロジェクト 'A' が v2 になる時にある変更を行なったために、あなたのプロジェクトと 'A' の v2 以降のバージョンとの間の互換性が失われるであろうという場合には、 v2 を許容しないことが筋の通ったことになるでしょう。

install_requires=[
   'A>=1,<2',
   'B>=2'
]

依存関係にあるものを特定のバージョンに固定するために、あるいは、さらなる依存関係(すなわち、あなたの依存先が依存するもの)を指定するために``install_requires``を使うことはベストプラクティスとは考えられていません。これは過剰に制限的であり、依存関係にあるものをまとめて更新することからユーザが得られる利益を阻害するものと考えられています。

最後に、``install_requires``が必要事項の「要約」のリスト、つまり、単に必要事項の名前とバージョンが要求されるだけあって、どこから(すなわち、どんな索引や情報源から)充当するのかについては要求していないのだということを理解することは重要です。どこから(すなわち、どのようにして「具体化」されるのか)という点については、:ref:`pip`のオプションを使ってインストール時に決定されるのです。[1]

Requirementsファイル#

:ref:`Requirementsファイル <pip:Requirements Files>`は、一番簡単にいうならば、:ref:`pip:pip install`の引数のリストをファイルに書いただけのものです。

``install_requires``が単一のプロジェクトにおける依存関係を定義する一方で、:ref:`Requirements Files <pip:Requirements Files>`はPython環境全体に対する要求事項を定義するのにしばしば用いられます。

``install_requires``での要求事項が最小限のものである一方で、requirementsファイルは再現可能な形で環境全体をインストールできるようにする:ref:`repeatable installations <pip:Repeatability>`という目的に沿って限定されたバージョンの網羅的なリストを含むことがしばしばです。

install_requires``での要求事項が「要約」、すなわち特定の索引には紐づけられていないのに対して、requirementsファイルではしばしば--index-url``や``--find-links``のようなpipのオプションが含まれていて特定の索引やパッケージ登録簿に紐づけられた「具体的な」要求事項になっています。[1]

``install_requires``では、メタデータがインストール中にpipによって自動的に解析される一方、requirementsファイルではそうではなく、``python -m pip install -r``を使ってユーザが明示的にインストールする時に使われるだけです。