Синтаксис версии зависимостей для Python Poetry - PullRequest
0 голосов
/ 16 февраля 2019

Проект Poetry - это система управления зависимостями для Python.Он использует новый pyproject.toml файл в качестве своего конфигурационного файла.

Инструменты Poetry поддерживают несколько различных способов указания разрешенных версий ваших зависимостей.Каков синтаксис спецификатора версии для поэтических зависимостей?

1 Ответ

0 голосов
/ 16 февраля 2019

В pyproject.toml вы используете разделы [tool.poetry.dependencies] и [tool.poetry.dev-dependencies], чтобы указать свои зависимости по имени и версии.

Когда вы запустите poetry install, Poetry установит точные требования хэшированиязаписал в свой файл poetry.lock.

Однако, когда вы запустите poetry update, Poetry проверит, может ли он найти более новые версии ваших зависимостей, которые соответствуют указанным вами критериям версии.Если poetry update найдет более новую версию, разрешенную вашими спецификаторами версий, она загрузит и установит ее.Он также обновит свой файл poetry.lock новым номером версии и новым хешем.

Поэзия поддерживает несколько различных способов объявления разрешенной версии ваших зависимостей.

Точная версия

Если вы не включите никаких модификаторов, Poetry сохранит вашу зависимость на точной версии.

beepboop = "2.1.7"

С этой конфигурацией, если новаявыпущена версия beepboop, poetry update не установит ее.

Версия каретки

Если вы используете символ каретки ^, Poetry обновится до любой новой версии, которая не изменитСамая левая ненулевая секция.

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#dependencies-and-dev-dependencies

...