诗歌项目是Python的依赖关系管理系统。它将新的pyproject.toml文件用作其配置文件。
诗歌工具支持一些不同的方式来指定依赖的允许版本。诗歌依赖版本规范的语法是什么?
在pyproject.toml中,您使用 [tool.poetry.dependencies]
和 [tool.poetry.dev-dependencies]
部分按名称和版本指定依赖项。
运行poetry install
时,诗歌将安装已写入poetry.lock
文件的精确散列要求。
但是,当您运行poetry update
时,诗歌将检查是否可以找到与您指定的版本标准相匹配的依赖版本的较新版本。如果poetry update
找到了您的版本规范允许的较新版本,它将下载并安装它。它还将使用新版本编号和新哈希更新其poetry.lock
文件。
诗歌支持几种不同的依赖版本的方式。
精确版本
如果您不包含任何修饰符,则诗歌将使您的依赖性固定在此确切版本上。
beepboop = "2.1.7"
使用该配置,如果发布了新版本的Beepboop,poetry update
将不会安装它。
Caret版本
如果您使用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更改。<<<<<<<<<<<<<<<<<</p>
zeepzorp = "^0.24.1"
# Equivalent to >=0.24.1, <0.25.0
使用上面的配置,poetry update
将将Zeepzorp更新为0.24.2。诗歌不会更新到Zeepzorp 0.25.0,因为这将版本编号的最左份的非零部分从24更改为25。
CARET版本修饰符对允许使用哪些升级版本非常激进。如果您的依赖的维护者会引入破坏变化而不增加主要版本编号,则可能会引起问题。
tilde版本
Tilde ~
字符告诉诗歌允许较小的更新。如果指定专业,次要和补丁版本,则仅允许修补级更改。如果指定主要版本和次要版本,则仅允许修补级更改。如果仅指定主要版本,则允许进行次要和补丁级更改。
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
Tilde版本修饰符比升级中的Caret版本修饰符不那么积极。
通配符版本
星*
字符是通配符。通配符位置允许任何版本号。
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问题。
参考
https://python-poetry.org/docs/depentency-specification/
https://github.com/sdispater/poetry#dependencies-and-dev-dependencies
提示:您可以检查其他pyproject.toml以检查在那里的使用方式。例如官方诗歌.toml本身https://github.com/python-poetry/poetry/poetry/blob/master/pyproject.toml