Python诗歌的依赖版本语法

时间:2019-02-16 05:06:36

标签: python python-poetry

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

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

1 个答案:

答案 0 :(得分:1)

在pyproject.toml中,您使用[tool.poetry.dependencies][tool.poetry.dev-dependencies]部分通过名称和版本指定依赖项。

当您运行poetry install时,Poetry将安装已写入其poetry.lock文件中的确切哈希要求。

但是,当您运行poetry update时,Poetry将检查是否可以找到与您指定的版本标准相匹配的依赖项的较新版本。如果poetry update找到了您的版本说明符允许的较新版本,它将下载并安装它。还将使用新的版本号和新的哈希值更新其poetry.lock文件。

诗歌支持几种不同的方式来声明允许的依赖关系版本。

确切版本

如果您不包含任何修饰符,那么Poetry会将您的依赖项固定在该确切版本上。

beepboop = "2.1.7"

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

Caret版本

如果使用插入符号^,则诗歌将更新为不会更改最左边的非零部分的任何新版本。

beepboop = "^2.1.7"
# Equivalent to >=2.1.7, <3.0.0

使用上述配置,poetry update会将beepboop更新为2.1.8、2.2、2.3等。诗歌不会更新为beepboop 3.0,因为这会将版本号的最左非零部分从2更改为到3。

zeepzorp = "^0.24.1"
# Equivalent to >=0.24.1, <0.25.0

使用上述配置,poetry update会将zeepzorp更新为0.24.2。诗歌不会更新为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,则还会收到SolverProblemError。尝试更狭窄地指定您的python版本,例如"^3.6"。有关更多信息,请参见此GitHub issue

参考文献

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

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