“诗歌锁”和“诗歌更新--锁”有什么区别?

Ari*_*asu 25 python python-poetry

poetry update --lock和 和有什么区别poetry lock?我在官方文档中找不到太多有用的提示,而且我知道两者并不相同,因为我们最近由于意外问题而不得不从升级包切换poetry update --lock到升级包。poetry lock

Dav*_*Liu 21

摘要:您不再更新poetry.lock文件中的包。


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

(poetry lock --help描述):

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

“处理”意味着解决依赖关系以兼容(默认情况下,与最新版本)。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. 安装软件包,这是不同的。文档没有明确提到这一点,但您可以从--lockflag 的描述中推断出来,它不执行安装,而只是更新poetry.lock

从上面链接的文档中:

--lock :不执行安装(仅更新锁定文件)。

请注意,更新不仅会安装新包,还会更新多个包。

$ poetry update
Updating dependencies
Resolving dependencies... (106.7s)

Writing lock file

Package operations: 1 install, 39 updates, 0 removals
Run Code Online (Sandbox Code Playgroud)

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

几乎。poetry install延迟安装,即:

  • 如果poetry.lock存在,它只安装锁定文件指定的软件包。
  • 如果不poetry.lock存在,它会尝试poetry update解决 中的依赖关系pyproject.toml,创建一个poetry.lock,然后安装它们。

因此,就像没有文件poetry install一样。如果您不想更新依赖项,直接从文件安装会稍微方便一些。poetry updatepoetry.lockpoetry.lock


我的经验是:poetry update除非有非常特殊的情况,否则就使用。在您的情况下,可能有一些软件包无法更新,因为该版本已被明确使用,并且升级会导致某些内容以难以修复的方式损坏。

  • 你的那个“TLDR”让我很困惑 (4认同)