【发布时间】:2019-02-16 05:06:36
【问题描述】:
Poetry 项目是 Python 的依赖管理系统。它使用新的pyproject.toml 文件作为其配置文件。
Poetry 工具支持几种不同的方式来指定您的依赖项的允许版本。 Poetry 依赖的版本说明符的语法是什么?
【问题讨论】:
标签: python python-poetry
Poetry 项目是 Python 的依赖管理系统。它使用新的pyproject.toml 文件作为其配置文件。
Poetry 工具支持几种不同的方式来指定您的依赖项的允许版本。 Poetry 依赖的版本说明符的语法是什么?
【问题讨论】:
标签: python python-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 命令按照诗歌想要的方式格式化文件,并将依赖关系指定为 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
【讨论】:
x.y.z和==x.y.z有什么区别?