Синтаксис версии зависимостей для Python Poetry
Проект Poetry - это система управления зависимостями для Python. Он использует новый файл pyproject.toml в качестве своего конфигурационного файла.
Инструменты Poetry поддерживают несколько различных способов указания разрешенных версий ваших зависимостей. Каков синтаксис спецификатора версии для поэтических зависимостей?
2 ответа
В pyproject.toml вы используете [tool.poetry.dependencies]
а также [tool.poetry.dev-dependencies]
разделы, чтобы указать ваши зависимости по имени и версии.
Когда ты бежишь poetry install
Поэзия установит точные хешированные требования, которые она написала poetry.lock
файл.
Тем не менее, когда вы запускаете poetry update
Поэзия проверит, может ли она найти более новые версии ваших зависимостей, которые соответствуют указанным вами критериям версии. Если poetry update
находит более новую версию, которая разрешена вашими спецификаторами версии, он загрузит и установит ее. Это также обновит его poetry.lock
файл с новым номером версии и новым хешем.
Поэзия поддерживает несколько различных способов объявления разрешенной версии ваших зависимостей.
Точная версия
Если вы не включите никаких модификаторов, Poetry сохранит вашу зависимость при точной версии.
beepboop = "2.1.7"
С этой конфигурацией, если выпущена новая версия beepboop, poetry update
не будет устанавливать его.
Каретная версия
Если вы используете каретку ^
персонаж, поэзия будет обновляться до любой новой версии, которая не меняет крайний левый ненулевой раздел.
beepboop = "^2.1.7"
# Equivalent to >=2.1.7, <3.0.0
С конфигурацией выше, poetry update
будет обновлять beepboop до 2.1.8, 2.2, 2.3 и т. д. Поэзия не будет обновляться до beepboop 3.0, потому что это меняет крайний левый ненулевой раздел номера версии с 2 на 3.
zeepzorp = "^0.24.1"
# Equivalent to >=0.24.1, <0.25.0
С конфигурацией выше, poetry update
обновил бы zeepzorp до 0.24.2. Поэзия не будет обновляться до zeepzorp 0.25.0, потому что это меняет крайний левый ненулевой раздел номера версии с 24 на 25.
Модификатор каретной версии довольно агрессивен в отношении того, какие обновленные версии разрешены. Это может вызвать проблемы, если сопровождающие ваших зависимостей вносят критические изменения без увеличения номера основной версии.
Тильда версия
Тильда ~
персонаж говорит поэзии разрешить незначительные обновления. При указании основной, вспомогательной версии и версии исправления допускаются только изменения на уровне исправления. Если вы укажете основную и вспомогательную версию, снова допускаются только изменения уровня патча. Если вы укажете только основную версию, то возможны незначительные изменения и изменения уровня исправления.
beepboop = "~2.1.7"
# Equivalent to >=2.1.7, <2.2.0
beepboop = "~2.1"
# Equivalent to >=2.1.0, <2.2.0
beepboop = "~2"
# Equivalent to >=2.0.0, <3.0.0
Модификатор версии тильды менее агрессивен, чем модификатор версии каретки в обновлениях, которые он допускает.
Версия с подстановочными знаками
Звезда *
символ является подстановочным знаком. Любой номер версии допускается в позиции подстановочного знака.
beepboop = "2.1.*"
# Equivalent to >=2.1.0, <2.2.0
beepboop = "2.*"
# Equivalent to >=2.0.0, <3.0.0
beepboop = "*"
# Allows any version. Equivalent to >=0.0.0
Версия неравенства
Вы можете использовать неравенства для указания допустимых диапазонов версий. Некоторые примеры:
beepboop = ">= 1.2.0"
beepboop = "> 1"
beepboop = "< 2"
beepboop = "!= 1.2.3"
Спецификаторы нескольких версий
Вы можете определить диапазоны допустимых версий, используя несколько неравенств, разделенных запятыми.
beepboop = ">= 1.2, < 1.5, !=1.2.2"
SolverProblemError
Если вы отредактировали свой pyproject.toml
файл, и вы получаете SolverProblemError
попробуйте использовать poetry add
команда вместо
Например, я попытался добавить mypy = "^0.670"
к моему pyproject.toml
и получил решающую ошибку. poetry add
Команда отформатировала файл так, как этого хотела поэзия, и задала зависимость как mypy = "^0.670.0"
,
Вы также можете получить SolverProblemError, если указали версию Python как '*'
в pyproject.toml
, Попробуйте указать версию Python более узко, например: "^3.6"
, Смотрите эту проблему GitHub для получения дополнительной информации.
Рекомендации
Совет. Вы можете проверить другой файл pyproject.toml, чтобы проверить, как там используются версии. Например, сама официальная поэзия .toml https://github.com/python-poetry/poetry/blob/master/pyproject.toml