"诗歌锁"和"诗歌更新锁"有什么区别?



poetry update --lockpoetry lock的区别是什么?我没能在官方文档中找到很多有用的提示,我知道两者都不一样,因为我们最近不得不从poetry update --lock切换到poetry lock升级软件包,因为意想不到的问题。

总结:你不再更新poetry.lock文件中的包了。


poetry lock创建poetry.lock文件,但不安装软件包。

(poetry lock --helpdescription):

lock命令读取pyproject。从当前目录中取出Toml文件,对其进行处理,并锁定诗歌中的依赖项。锁定文件。

"Processing"意味着将依赖项解析为兼容(默认情况下,与最新版本兼容)。poetry lock不安装包,它只生成一个poetry.lock文件。

假设我有一个包A,它有子依赖项b。

  1. poetry lock解析pyproject.toml文件中的所有依赖项及其子依赖项。
  2. 默认情况下,它将尝试更新所有子依赖版本。所以它会尝试更新最新版本的A和最新版本的b。
  3. --no-update将阻止任何更新。相反,Poetry将专注于使pyproject.toml版本兼容,但将使用与pyproject.toml中现有版本兼容的任何版本。这意味着即使包A与包B的最新版本兼容,它也不会更新包B,它只会确保使用一些兼容的包B。

poetry update也更新包版本,然后安装更新。

  1. 解析依赖项以相互兼容,就像poetry lock
  2. 创建或更新poetry.lock,如poetry lock
  3. 包,这是不同的。文档没有明确提到这一点,但您可以从--lock标志的描述中推断,它不执行安装,而只是更新poetry.lock

从上面链接的文档:

——lock: Do not perform install (onlyupdate)lockfile)。

注意,更新不仅安装了一个新包,而且也更新了几包。

$ poetry update
Updating dependencies
Resolving dependencies... (106.7s)
Writing lock file
Package operations: 1 install, 39 updates, 0 removals

等等,但这基本上听起来就像poetry install!

poetry install惰性安装,即:

  • 如果存在poetry.lock,它只安装锁文件指定的包。
  • 如果不存在poetry.lock,它就像poetry update一样,并尝试解决pyproject.toml中的依赖项,创建poetry.lock,然后安装它们。

因此,如果没有poetry.lock文件,则poetry installpoetry update相同。如果你不想更新依赖项,直接从poetry.lock文件安装只会稍微方便一点。


我的经验是:除非你有非常特殊的情况,否则只使用poetry update。在您的情况下,可能有一些软件包无法更新,因为该版本被显式地使用,升级将导致某些东西以难以修复的方式中断。

当没有其他参数调用时,它们做同样的事情。

如果您检查源代码,您将看到它们最终都调用相同的函数(def run)来更新锁文件。在此之前,它们都使用参数False调用def execute_operations,以避免实际安装任何东西。

的区别唯一不同的是调用这些命令时可以传递的其他选项。这些会影响你想要做的事情。你可以在文档中看到这些额外的选项。

  • poetry lock:--no-update(源代码)
  • poetry update --lock:packages --without --with --only --dry-run(源代码)

因此,例如,您可以创建/更新锁文件,而无需更新以前固定在pyproject.toml中的任何包,也可以将poetry.lock中的任何固定版本更新为最新版本,仅使用以下命令:
poetry lock --no-update
类似地,您可以仅在锁文件中更新特定的包版本。使用以下命令:
poetry update [package] --lock

或者您可以通过仅在dry-run模式下运行来测试锁文件更新使用以下命令:

poetry update --lock --dry-run

您可能还认为可以使用以下命令来更新锁文件的dev依赖项:

poetry update --lock --only=dev

但是从1.6开始,不管什么原因,这都不起作用了

最新更新