Зачастую в файле с зависимостями проекта можно увидеть следующее:
requests>=2.28.1
Установится requests самой свежей версией выше указанной. Безобидный значок >= может повлечь множество неприятностей, и есть шанс после очередного обновления словить:
— калечащие изменения из-за отсутствия обратной совместимости
— новые баги используемой библиотеки
— и даже злонамеренные изменения в коде
Поэтому всегда фиксируйте зависимости путём использования == вместо >=. Применяйте это правило не только к requirements. Например, в докер-файле не используйте тег latest и всегда указывайте конкретную версию образа. В статье A developer sabotaged their own libraries (businessinsider, 2022) показаны последствия нежелания фиксировать версии зависимостей.
Конечно, не следует жить на старых версиях. Но периодические обновления зависимостей должны проходить в ручном режиме.
Следующий уровень паранойи — вендоринг. В дополнение к фиксированию версии вы также храните её в своём локальном репозитории. Кстати, в качестве универсального хранилища любых зависимостей можем порекомендовать self-hosted решение nexus (docker, apt, pip и многое другое).
Это выглядит избыточным, но продуктовая разработка с живыми пользователями заставляет смотреть на подобные рекомендации иначе. Прочитайте Protestware on the rise (techcrunch, 2022) об удалении популярного пакета из pypi.
На каком уровне паранойи остановиться — решать вам.
#python