Синтаксис версии зависимости для Python Poetry

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
30
0
11 926
1

Ответы 1

В 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"

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://python-poetry.org/docs/dependency-specification/

https://github.com/sdispater/poetry#dependencies-and-dev-зависимости

В чем разница между x.y.z и ==x.y.z?

Nicholas 04.08.2021 18:50

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