install_requires проти файлів requirements

install_requires

install_requires — ключове слово у setuptools-файлі setup.py, яке слід використовувати для зазначення того, що проєкт потребує мінімально, аби запускатися коректно. Коли проєкт інстальовано за допомогою pip, це специфікація, яка використовується для встановлення його залежностей.

Наприклад, якщо проєкт потребує A чи B, ваш install_requires виглядатиме ось так:

install_requires=[
   'A',
   'B'
]

До того ж, позначення будь-яких відомих нижніх чи верхніх меж вважається найкращою практикою.

Наприклад, може бути відомо, що ваш проєкт потребує щонайменше v1 залежності „A“ та v2 залежності „B“, тоді це виглядатиме отак:

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

Крім того, може бути відомо, що проєкт A використовує семантичне версіонування і що „A“ v2 означає несумісну зміну, тож має сенс не дозволяти v2:

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

Закріплення точних версій залежностей у install_requires не вважається найкращою практикою, так само, не варто вказувати під-залежності (тобто залежності ваших залежностей). Це надміру обмежувально і перешкоджає користувачам скористатися перевагами оновлення залежностей.

Наостанок, важливо розуміти, що install_requires перелічує «Абстрактні» залежності, тобто лише обмеження назв і версій, які не визначають звідки ті залежності будуть заповнені (тобто, із якого реєстру чи джерела). Звідки (тобто, яким чином вони мають стати «Конкретними») визначається під час встановлення за допомогою опцій pip. 1

Файли requirements

Файли requirements, описуючи дуже спрощено, це лише перелік аргументів для pip install, записаних у файл.

У той час як install_requires визначає залежності для єдиного проєкту, файли requirements часто використовуються для визначення залежностей для певного середовища Python environment.

У той час як залежності в install_requires мінімальні, файли requirements часто містіть вичерпний перелік конкретних версій задля досягнення повторюваних встановлень повного середовища.

У той час як залежності в install_requires «Абстрактні», тобто не пов’язані із жодним конкретним реєстром, файли requirements часто містять опції pip на кшталт --index-url чи --find-links, щоб зробити залежності «Конкретними», тобто асоційованими із певним реєстром чи каталогом пакунків. 1

У той час як pip автоматично аналізує метадані з install_requires під час встановлення, цього не відбувається із файлами requirements, вони лиш використовуються коли користувачі явно встановлюють їх через python -m pip install -r.


1(1,2)

For more on «Abstract» vs «Concrete» requirements, see https://caremad.io/posts/2013/07/setup-vs-requirement/.