Python Poetry 的依赖版本语法

Chr*_*ong 20 python python-poetry

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

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

Chr*_*ong 43

在 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"
Run Code Online (Sandbox Code Playgroud)

使用该配置,如果发布了新版本的 beepboop,poetry update则不会安装它。

插入符号版本

如果您使用插入^字符,Poetry 将更新到任何不更改最左侧非零部分的新版本。

beepboop = "^2.1.7"
# Equivalent to >=2.1.7, <3.0.0
Run Code Online (Sandbox Code Playgroud)

使用上述配置,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
Run Code Online (Sandbox Code Playgroud)

使用上面的配置,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
Run Code Online (Sandbox Code Playgroud)

在它允许的升级中,波浪号版本修饰符不如插入符号版本修饰符那么激进。

通配符版本

星号*是通配符。通配符位置允许使用任何版本号。

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  
Run Code Online (Sandbox Code Playgroud)

不等式

您可以使用不等式来指定允许的版本范围。一些例子:

beepboop = ">= 1.2.0"
beepboop = "> 1"
beepboop = "< 2"
beepboop = "!= 1.2.3"
Run Code Online (Sandbox Code Playgroud)

多个版本说明符

您可以使用多个不等式来定义允许版本的范围,以逗号分隔。

beepboop = ">= 1.2, < 1.5, !=1.2.2"
Run Code Online (Sandbox Code Playgroud)

求解器问题错误

如果您手动编辑了pyproject.toml文件并且得到了SolverProblemError,请尝试改用该poetry add命令。

例如,我尝试添加mypy = "^0.670"到我的pyproject.toml并遇到求解器错误。该poetry add命令按照诗歌想要的方式格式化文件,并将依赖项指定为mypy = "^0.670.0".

如果您指定的Python版本,你也可以得到一个SolverProblemError'*'pyproject.toml。尝试更严格地指定您的 python 版本,例如"^3.6". 有关更多信息,请参阅此GitHub 问题

参考

https://poetry.eustace.io/docs/versions/

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

  • `xyz` 和 `==xyz` 有什么区别? (3认同)