Каково назначение файла poetry.lock в проектах Python

Ответ

Файл poetry.lock обеспечивает детерминированные (воспроизводимые) сборки проекта. Он записывает точные версии каждой зависимости и под-зависимости, которые были установлены для проекта, вместе с их хеш-суммами.

Основная задача — решить проблему, когда в pyproject.toml указаны диапазоны версий (например, requests = "^2.28.0"). Без lock-файла разные разработчики или CI/CD-системы могли бы установить разные минорные версии пакета, что потенциально может привести к ошибкам.

Ключевые характеристики:

  • Воспроизводимость: Гарантирует, что команда poetry install всегда установит один и тот же набор пакетов на любой машине.
  • Безопасность: Хранит хеши пакетов для проверки их целостности при установке.
  • Автоматическое управление: Файл не редактируется вручную. Он создается и обновляется командами poetry lock или poetry update.
  • Командная работа: Этот файл необходимо коммитить в систему контроля версий (например, Git), чтобы вся команда работала с идентичным окружением.

Пример фрагмента poetry.lock:

[[package]]
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
category = "main"
optional = false
python-versions = ">=3.7"

[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = {version = ">=2,<4", markers = "python_version >= '3'"}
idna = {version = ">=2.5,<4", markers = "python_version >= '3'"}
urllib3 = {version = ">=1.21.1,<3", markers = "python_version >= '3'"}

[metadata]
# ...
content-hash = "..."