Poetry项目是 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
命令以 poetry 想要的方式格式化文件,并将依赖项指定为 mypy = "^0.670.0"
。
如果您在 pyproject.toml
中将您的 python 版本指定为 '*'
,您也可以获得 SolverProblemError。尝试更严格地指定您的 Python 版本,例如 "^3.6"
。看这个GitHub issue了解更多信息。
引用资料
https://python-poetry.org/docs/dependency-specification/
https://github.com/sdispater/poetry#dependencies-and-dev-dependencies
关于python - Python Poetry 的依赖版本语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720072/