【问题标题】:How to update Poetry's lock file without upgrading dependencies?如何在不升级依赖项的情况下更新 Poetry 的锁文件?
【发布时间】:2022-05-19 14:50:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: python python-poetry


【解决方案1】:

lock 命令有一个特定的选项:

poetry lock --no-update

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

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

【讨论】:

    【解决方案2】:

    目前(截至版本 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 问题的更多详细信息。

    【讨论】:

      【解决方案3】:

      我不确定为什么 poetry lock 正在更新。 documentation 没有提到它更新了依赖项。这对我来说可以删除日志输出中的警告。

      【讨论】:

      • 你的答案现在已经过时了,有一个--no-update 选项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 2013-04-03
      • 2013-02-19
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      相关资源
      最近更新 更多