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.3 KiB
2.3 KiB
Итоги: закрепление версий зависимостей (п. 1.2)
План: docs/plan-pin-dependencies.md.
Сделано
requirements.txtиrequirements-dev.txt: прямые зависимости с точными версиями. Прод:requests==2.34.2,fastapi==0.141.1,uvicorn==0.53.0,APScheduler==3.11.3. Разработка:pytest==9.1.1,httpx==0.28.1.constraints.txt(новый, 26 пакетов): полныйpip freezeобраза, на котором проходили тесты, включая транзитивные пакеты (starlette,pydantic,urllib3и др.).DockerfileиDockerfile.testставят пакеты с-c constraints.txt.- README: ручная установка с
-c constraints.txt, список копируемых файлов приведён в соответствие с кодом (был неполным), раздел «Dependency versions» с порядком обновления, замечание об образе исправлено.
Проверка
- Оба образа собраны без кэша, 18 тестов проходят.
- Прод-образ: пакеты полностью совпадают с
constraints.txt,pytestиhttpxв нём нет;api_server,collector_daemon,db,healthcheckимпортируются. - Версии взяты из того, что уже стояло и проходило тесты, поведение не менялось.
Замечания
- Базовый образ
python:3.11-slimне закреплён по дайджесту: патчи Python приходят при пересборке (осознанный компромисс). - Закрепление даёт воспроизводимость, но не обновляет уязвимые версии само: проверку обновлений нужно делать вручную (порядок в README).
- Не проверялась сборка на другой архитектуре: часть пакетов (
pydantic_core) содержит бинарные сборки под платформу. docker compose upне запускался повторно: образ собран тем же Dockerfile, стенд не менялся.