Лучшие практики для обмена сторонними зависимостями с вашими собственными зависимостями - PullRequest
2 голосов
/ 09 марта 2020

Мой проект имеет зависимость от другого проекта, и я использую git зависимость в файле setup.py следующим образом:

setup(
    name="cake",
    version="0.1",
    install_requires=[
        "flan @ git+ssh://git@github.com/terrymcguire/flan.git#egg=flan"
    ]
)

Предположим, что они оба зависят от pyyaml. Рекомендуется ли включать "pyyaml==5.1.2" в оба проекта setup.py, install_requires: ... (или requirements.txt, как вы предпочитаете), и убедиться, что версии совпадают, или рекомендуется иметь только pyyaml указан как зависимость в проекте flan, а затем наследует версию в родительском проекте, хотя тогда становится менее ясно, что pyyaml является зависимостью родительского проекта, и если однажды я больше не буду зависеть от flan, Я мог не заметить, что мог сломать другой код?

1 Ответ

2 голосов
/ 09 марта 2020

1.

Рекомендуется ли включать "pyyaml==5.1.2" в оба проекта * setup.py, install_requires: ... (или requirements.txt как вы предпочитают) [...]?

Только приложения должны (возможно) прикрепить требования к определенной c версии. Библиотеки должны ограничиваться диапазоном известных совместимых версий (как можно точнее).

В целом, я считаю, что закрепление версий зависимостей в setup.py (или pyproject.toml) - плохая идея, поскольку они могут не может быть (легко) отменен конечным пользователем, который в конечном итоге устанавливает проекты (не важно, приложения или библиотеки) и тот, кто должен иметь последнее слово о том, что будет установлено. С другой стороны, рекомендуется дать рекомендацию о комбинации закрепленных версий зависимостей, которая, как известно, хорошо работает (потому что она была протестирована) в форме файла requirements.txt, который конечный пользователь может использовать или нет (для приложений это не имеет особого смысла для библиотек).

Прочтите, например, статью Дональда Стиффта " setup.py vs needs.txt " .

2.

рекомендуется указывать только pyyaml ​​как зависимость в проекте flan, а затем наследовать версию в родительском проекте, хотя тогда менее ясно, что pyyaml ​​является зависимостью родительского проекта [...]?

Общее (очевидное) правило состоит в том, что все проекты должны перечислять все свои собственные зависимости и только свои собственные зависимости. Все остальное не имеет никакого смысла (конечно, как всегда могут быть исключения).

...