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

How to update Poetry's lock file without upgrading dependencies?

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

Warning: The lock file is not up to date with the latest changes in pyproject.toml. You may be getting outdated dependencies. Run update to update them.

很好,但是如果我 运行 poetry update 它会升级我的依赖项,这不是我现在想要的。如果我 运行 poetry lock 相反,它仍然会升级依赖项。

很抱歉没有提供可重现的示例,生成具有过时依赖项的 poetry.lock 文件非常棘手。我现有的太大,无法在此处发布。

更新:已针对此问题打开sdispater/poetry#1614

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

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

poetry update foo

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

的任何更改同步

在我自己的例子中,此命令将 [extras] 部分添加到锁定文件并更新了元数据内容哈希,而没有触及任何其他内容。锁定文件现在是最新的并且警告消失了。

更新:

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

poetry add insecure-package && poetry remove insecure-package

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

我不确定 poetry lock 为什么要更新。 documentation 没有提到它会更新依赖项。这对我有用,可以删除日志输出中的警告。

lock 命令有一个特定选项:

poetry lock --no-update

这使得从 pyproject.toml 中删除依赖项并更新锁定文件而不升级依赖项成为可能。

请注意,这仅适用于 1.1.2(或更早版本?)并且行为 will be changed in v2.0