Проект Поэзия — это система управления зависимостями для Python. Он использует новый файл pyproject.toml в качестве файла конфигурации.
Инструменты Poetry поддерживают несколько различных способов указания разрешенных версий ваших зависимостей. Каков синтаксис спецификатора версии для зависимостей Poetry?
В pyproject.toml вы используете разделы [tool.poetry.dependencies]
и [tool.poetry.dev-dependencies]
, чтобы указать свои зависимости по имени и версии.
Когда вы запустите poetry install
, Poetry установит точные требования к хешированию, которые он записал в свой poetry.lock
файл.
Однако, когда вы запустите poetry update
, Poetry проверит, сможет ли он найти более новые версии ваших зависимостей, которые соответствуют указанным вами критериям версии. Если poetry update
найдет более новую версию, разрешенную вашими спецификаторами версии, он загрузит и установит ее. Он также обновит свой файл poetry.lock
, указав новый номер версии и новый хэш.
Poetry поддерживает несколько различных способов объявления разрешенной версии ваших зависимостей.
Если вы не включите никаких модификаторов, 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 и т. д. Poetry не обновился бы до beepboop 3.0, потому что это меняет крайний левый ненулевой раздел номера версии с 2 на 3.
zeepzorp = "^0.24.1"
# Equivalent to >=0.24.1, <0.25.0
С приведенной выше конфигурацией poetry update
обновит zeepzorp до 0.24.2. Poetry не будет обновляться до zeepzorp 0.25.0, потому что это меняет крайний левый ненулевой раздел номера версии с 24 на 25.
Модификатор версии каретки довольно агрессивен в отношении того, какие обновленные версии разрешены. Это может вызвать проблемы, если сопровождающие ваших зависимостей вносят критические изменения без увеличения основного номера версии.
Символ тильды ~
сообщает Poetry разрешить незначительные обновления. Если вы укажете основную, дополнительную версию и версию исправления, допускаются только изменения на уровне исправления. Если вы укажете основную и дополнительную версии, снова разрешены только изменения на уровне исправления. Если вы укажете только основную версию, то допускаются второстепенные изменения и изменения на уровне исправлений.
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"
Если вы отредактировали файл 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://python-poetry.org/docs/dependency-specification/
https://github.com/sdispater/poetry#dependencies-and-dev-зависимости
В чем разница между
x.y.z
и==x.y.z
?