Когда использовать файл требований pip по сравнению с install_requires в setup.py

Я использую pip с virtualenv для упаковки и установки некоторых библиотек Python.

Я представляю, что я делаю, это довольно распространенный сценарий. Я поддерживаю несколько библиотек, для которых я могу явно указать зависимости. Некоторые из моих библиотек зависят от сторонних библиотек, которые имеют транзитивные зависимости, которые я не контролирую.

Я пытаюсь добиться того, чтобы pip install в одной из моих библиотек загрузил /установил все вышестоящие зависимости. В документации по pip я борюсь с тем, чтобы выполнить требования. файлы могут сделать это самостоятельно или, если они действительно являются дополнением к использованию install_requires.

Я бы использовал install_requires во всех моих библиотеках, чтобы указать зависимости и диапазоны версий, а затем использовать только файл требований для разрешения конфликта и /или заморозить их для сборки производства?

Давайте представим, что я живу в воображаемом мире (я знаю, я знаю), и мои исходные зависимости просты и гарантированно никогда не будут конфликтовать или нарушать обратную совместимость. Буду ли я вообще вынужден использовать файл требований pip или просто разрешить pip /setuptools /distribate установить все на основе install_requires?

Здесь много похожих вопросов, но я не смог найти ни одного, который был бы таким же базовым, как когда использовать один или другой или использовать их вместе гармонично.

82 голоса | спросил Joe Holloway 5 AM000000120000001731 2011, 00:16:17

4 ответа


0

Моя философия заключается в том, что install_requires должно указывать минимум того, что вам нужно. Это может включать требования к версии, если вы знаете , что некоторые версии не будут работать; но в нем не должно быть требований к версии, в которых вы не уверены (например, вы не уверены, нарушит ли ваша будущая версия зависимости вашу библиотеку или нет).

Файлы требований, с другой стороны, должны указывать на то, что работает , как вы знаете, работают, и могут включать в себя необязательные зависимости, которые вы рекомендуете. Например, вы можете использовать SQLAlchemy, но предложить MySQL и поместить MySQLdb в файл требований).

Итак, в итоге: install_requires - держать людей подальше от вещей, которые, как вы знаете, не работают, а файлы с требованиями вести люди на вещи, которые вы знаете, работают. Одна из причин этого заключается в том, что требования install_requires проверяются всегда и не могут быть отключены без фактического изменения метаданных пакета. , Таким образом, вы не можете легко попробовать новую комбинацию. Файлы требований проверяются только во время установки.

ответил Ian Bicking 17 AM00000010000004831 2011, 01:04:48
0

вот что я положил в мой setup.py:

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

setup(
    .....
    install_requires=REQUIREMENTS
)
ответил rbp 11 MarpmMon, 11 Mar 2013 18:26:55 +04002013-03-11T18:26:55+04:0006 2013, 18:26:55
0

В руководстве пользователя Python Packaging есть страница, посвященная этой теме, я настоятельно рекомендую вам прочитать ее.

Резюме:

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.

ответил Flimm 12 +03002016-10-12T16:41:08+03:00312016bEurope/MoscowWed, 12 Oct 2016 16:41:08 +0300 2016, 16:41:08
0

Я использую только setup.py и install_requires потому что есть только одно место для просмотра. Он такой же мощный, как и файл требований, и дублирование не требуется.

ответил Sebastian Blask 13 32013vEurope/Moscow11bEurope/MoscowWed, 13 Nov 2013 20:43:14 +0400 2013, 20:43:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132