Exact versions for direct dependencies, full pip freeze of the tested image as constraints, both Dockerfiles install with -c constraints.txt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
План: закрепление версий зависимостей (п. 1.2 рекомендаций)
Цель
Сборка образа и запуск тестов воспроизводимы: завтрашняя сборка использует те же версии библиотек, что и сегодняшняя (риск 2 анализа). Обновление библиотек становится осознанным действием.
Дизайн
- Версии берутся из образа, на котором сейчас проходят 18 тестов (
pip freezeв контейнере, Python 3.11), поэтому поведение не меняется. requirements.txtиrequirements-dev.txt: только прямые зависимости с точной версией (==), файлы остаются читаемыми.- прод:
requests,fastapi,uvicorn,APScheduler; - разработка:
pytest,httpx.
- прод:
constraints.txt(новый): полный список всех установленных пакетов, включая транзитивные (starlette,pydantic,urllib3и др.). Оба Dockerfile ставят пакеты с-c constraints.txt, поэтому закреплены и косвенные зависимости.- Базовый образ
python:3.11-slimне закрепляется по дайджесту (патчи безопасности Python приходят автоматически); это осознанный компромисс, указан в README. - Порядок обновления (в README): поднять версии в контейнере, прогнать тесты, обновить
constraints.txtизpip freeze, коммит.
Изменения
requirements.txt,requirements-dev.txt: точные версии.constraints.txt: новый файл.Dockerfile,Dockerfile.test: копированиеconstraints.txt, установка с-c.README.md: ручная установка с-c constraints.txt, порядок обновления версий.- Тестов не добавляется (код не меняется).
Проверка
- Сборка обоих образов, 18 тестов проходят.
- В прод-образе
pip freezeсовпадает с закреплёнными версиями (нет лишних пакетов вродеpytest). - Импорт
api_serverиcollector_daemonв прод-образе.