python - Python Poetry 的依赖版本语法

标签 python python-poetry

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/

相关文章:

python - 根据条件替换ndarray的尾部

python - 用诗歌运行包 pytest

python-3.x - 安装 github 子模块时,诗歌安装失败并显示 [CalledProcessError]

python - 诗歌忽略pyproject.toml中的依赖

python - Poetry 和 Pytest-cov with Sonar : how to reconcile the references?

python - 创建具有递增整数的变量

python - keras LSTM 获取隐藏状态(将句子序列转换为文档上下文向量)

python - 如何通过单个 HTTP 请求获取 Python 最新稳定版本的版本号?

python - 如何使用 Python 访问(读取、写入)Google Sheets 电子表格?

python - 诗歌和 PyTorch