如何在不升级依赖项的情况下更新 Poetry 的锁定文件?

Cla*_*dio 6 python python-poetry

[tool.poetry.extras]部分添加到 后pyproject.toml,Poetry 会显示以下警告,例如在安装时:

警告:锁定文件不是最新的 pyproject.toml 中的最新更改。您可能会得到过时的依赖项。运行更新以更新它们。

这很好,但是如果我运行poetry update它会升级我的依赖项,这不是我目前想要的。如果我poetry lock改为运行,它仍然会升级依赖项。

很抱歉没有提供可重现的示例,生成具有过时依赖项的诗歌.lock 文件非常棘手。我现有的一个太大了,不能在这里张贴。

更新:为此问题打开了sdispater/poetry#1614

slh*_*hck 12

从 1.1.2(或更早?)开始,现在有一个选项:

poetry lock --no-update
Run Code Online (Sandbox Code Playgroud)

这使得可以在pyproject.toml不升级依赖项的情况下从锁定文件中删除依赖项并更新锁定文件。

请注意,该行为将在 v2.0 中更改


Cla*_*dio 6

目前(从版本开始1.0.0b6)似乎没有任何 Poetry 命令可以更新锁定文件而不升级依赖项。

但是,如果您的项目有一些最新的依赖项foo,您可以通过调用以下命令来解决此限制:

poetry update foo
Run Code Online (Sandbox Code Playgroud)

这将保留foo当前版本(因为它已经是最新版本),并且也不会触及任何其他依赖项。但它会将锁定文件与pyproject.toml.

在我自己的情况下,此命令将该[extras]部分添加到锁定文件并更新元数据内容哈希,而不涉及任何其他内容。锁定文件现在是最新的,警告消失了。

更新:

更好的解决方法是在依赖树之外添加和删除一个包,例如insecure-package

poetry add insecure-package && poetry remove insecure-package
Run Code Online (Sandbox Code Playgroud)

这样做更好的原因之一是poetry update您需要传递与最初使用的选项完全相同的选项。有关问题中提到的 GitHub 问题的更多详细信息。