Синтаксис версии зависимостей для 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 для получения дополнительной информации.

Рекомендации

https://poetry.eustace.io/docs/versions/

https://github.com/sdispater/poetry

Совет. Вы можете проверить другой файл pyproject.toml, чтобы проверить, как там используются версии. Например, сама официальная поэзия .toml https://github.com/python-poetry/poetry/blob/master/pyproject.toml

Другие вопросы по тегам