35

Poetry项目是 Python 的依赖管理系统。它使用新的pyproject.toml文件作为其配置文件。

Poetry 工具支持几种不同的方式来指定允许的依赖版本。诗歌依赖的版本说明符的语法是什么?

4

1 回答 1

77

在 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".

如果您将 python 版本指定'*'pyproject.toml. 尝试更严格地指定您的 python 版本,例如"^3.6". 有关更多信息,请参阅此GitHub 问题

参考

https://python-poetry.org/docs/dependency-specification/

https://github.com/sdispater/poetry#dependencies-and-dev-dependencies

于 2019-02-16T05:06:36.367 回答