Когда использовать файл требований pip по сравнению с установкой требуется в setup.py?
Я с помощью pip в виртуальное окружение, чтобы упаковать и установить некоторые библиотеки Python.
Я представляю, что я делаю-это достаточно распространенный сценарий. Я сопровождаю несколько библиотек, для которых я могу явно указать зависимости. Некоторые из моих библиотек зависят от сторонних библиотек, которые имеют транзитивные зависимости, над которыми я не имею никакого контроля.
что я пытаюсь достичь, это для pip install
на одной из моих библиотек, чтобы загрузить / установить все его восходящие зависимости. То, с чем я борюсь в документации pip, - это if/how требования файлы может сделать это самостоятельно или если они действительно просто дополнение к использованию install_requires
.
Я бы использовал install_requires
во всех моих библиотеках указать зависимости и диапазоны версий, а затем использовать только файл требований для разрешения конфликта и/или заморозить их для производственной сборки?
давайте представим, что я живу в воображаемом мире (я знаю, я знаю) и мой восходящие зависимости просты и гарантированно никогда не конфликтуют или не нарушают обратную совместимость. Буду ли я вынужден использовать файл требований pip вообще или просто позволить pip / setuptools / distribute установить все на основе install_requires
?
есть много подобных вопросов здесь, но я не мог найти ни как, когда использовать один или другой или использовать их как вместе, так гармонично.
4 ответа:
моя философия заключается в том, что
install_requires
должен указывать минимум того, что вам нужно. Он может включать требования к версии, если вы знаю что некоторые версии не будут работать; но у него не должно быть требований к версии, в которых вы не уверены (например, вы не уверены, что будущий выпуск зависимости сломает вашу библиотеку или нет).файлы требований с другой стороны должны указывать, что вы знаете тут работа, и может включать в себя дополнительные зависимости, которые вы рекомендуете. Например, вы можете использовать SQLAlchemy, но предложить MySQL, и поэтому поместите MySQLdb в файл требований).
Итак, вкратце:
install_requires
Это держать людей подальше от вещей, которые вы знаете, не работают, в то время как файлы требований, чтобы привести людей к вещам, которые вы знаете, работают. Одной из причин этого является то, чтоinstall_requires
требования всегда проверено и не может быть отключено без фактического изменения метаданных пакета. Так что вы не можете легко попробовать новую комбинацию. Файлы требований проверяются только во время установки.
вот что я положил в мой setup.py:
# this grabs the requirements from requirements.txt REQUIREMENTS = [i.strip() for i in open("requirements.txt").readlines()] setup( ..... install_requires=REQUIREMENTS )
в руководстве пользователя 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
.