Короткий ответ
pip install flask ставит последнюю доступную версию без гарантии, что завтра или на другой машине будет установлена та же версия, а flask==2.3.3 фиксирует точную версию — это нужно для воспроизводимости сборок и предсказуемого поведения приложения в разных средах.
Как это работает подробнее
pip по умолчанию разрешает диапазон версий, совместимый с окружением, и может подтянуть новый релиз с изменённым поведением. Точная фиксация убирает эту неопределённость.
Пример кода
Пример конфигурации
# без фиксации — риск несовпадения версий между машинами
flask
# с фиксацией — воспроизводимая сборка
flask==2.3.3
sqlalchemy==2.0.23Что использовать на практике
- Рекомендация. в requirements.txt для приложений фиксируют точные версии всех зависимостей (через
pip freezeилиpip-compile), чтобы установка давала одинаковый набор пакетов в dev, CI и production. Для библиотек задают более широкие диапазоны.
Подводные камни
- Риск. фиксировать только верхнеуровневые пакеты, не учитывая транзитивные зависимости; не обновлять версии годами, накапливая неисправленные уязвимости; путать назначение зависимостей приложения и переиспользуемой библиотеки.