我应该单独提交 .lock 文件更改吗?我应该为提交消息写什么?

use*_*363 10 python git python-poetry

我正在为我的 Python 包管理器使用诗歌,但我相信这适用于任何编程实践。

我一直在这样做,但不知道我在做什么,或者我应该怎么做。

当您使用包管理器并安装新包时,通常会.lock更改文件以保持构建的确定性。

通常,我会提交这些更改,例如:

$ git add poetry.lock pyproject.toml 
$ git commit -m "Install packages: beautifulsoup4"
Run Code Online (Sandbox Code Playgroud)

即,我每次安装/删除软件包时都会提交一次。我这样做是因为我觉得这是我应该做的,但我有 0 个线索,如果这实际上是处理这个问题的正确方法。

我做得很好吗?或者是否有任何其他特定的约定和规则我应该遵守以使其尽可能接近最佳实践?

fin*_*mer 16

到目前为止,所有给出的答案都忽略了 Poetry 的锁定文件和其他工具之间的一个重要区别,例如pip freeze:Poetry 的锁定文件是一个通用锁定文件。

这意味着 Poetry 不关心当前环境,既不关心正在使用的 Python 版本,也不关心平台。相反,它确保依赖关系在pyproject.toml. 这会生成一个在任何平台上都有效的锁定文件,其 Python 版本在pyproject.toml.

与其他生成锁定文件的工具的区别也是 Poetry 在解决依赖关系方面速度较慢的原因。这也是为什么建议在poetry.lock您的 vcs 中检查的原因。这样做可以加快开发环境的设置速度,并确保您的环境是可重现的。

  • 三个月后,维护者宣布 CVS 中“poetry.lock”的想法无效,请参阅 https://github.com/python-poetry/poetry/issues/7211。文件的兼容性在次要版本之间被破坏,因此它只会破坏世界。 (3认同)

Ruu*_*men 10

事实上,诗歌在他们的网站上有一个关于此的部分:https ://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control

他们认为实际提交此文件很重要,因为这将显示提交时使用了所包含的库的哪些版本。

将此文件提交到 VC 很重要,因为它将导致设置项目的任何人使用与您正在使用的依赖项完全相同的版本。您的 CI 服务器、生产机器、团队中的其他开发人员、所有事物和每个人都运行在相同的依赖项上,这减少了仅影响部署的某些部分的错误的可能性。即使您单独开发,在六个月内重新安装项目时,您也可以确信安装的依赖项仍然有效,即使您的依赖项从那时起发布了许多新版本。(请参阅下面有关使用更新命令的注释。)

对于库,不需要提交锁定文件。


Arn*_*rne 8

诗歌维护者官方建议是,如果您开发可部署的应用程序(而不是库),则提交锁定文件。


话虽如此,我个人的经验是没有必要将锁文件提交到 VCS。该pyproject.toml文件是正确构建指令的参考,而锁定文件是单个成功部署的参考。现在,我不知道规范poetry.lock是什么,但是在与同事合作的过程中,我经常让它们适得其反,而只有删除它们才能解决问题。

一个常见的问题是,使用不同的操作系统或 python 版本会导致不同的锁文件,这就是行不通的。我很乐意让我们的 CI 构建并保留一个权威的引用锁定文件以启用重新构建,但它仍然不会提交到存储库。


如果根据您的工作流程维护共享锁文件是可行的 - 太棒了!您避免了管道中的一个步骤,少了一个需要担心的工件,并大大减少了构建时间(即使是中等规模的项目也可能需要几分钟才能完成完整的依赖项解析)。

但据最佳实践走了,我会考虑加入poetry.lock.gitignore一个更好的做法比你做什么,只承诺pyproject.toml在您添加依赖关系的变化。

  • 我帮助维护了许多封闭和开源项目,它们都提交了锁定文件,部分原因是我提倡这样做。现在我很后悔这个选择,因为经常有人的构建无法正常工作,解决方案是删除并重新构建锁定文件,之后我们所有人最终都会遇到合并冲突。 (4认同)
  • 即使在这种情况下,如果您想支持不同的平台,也可能会出错。如果您在 Linux 上进行开发,并提交在上述 Linux 上构建的锁定文件,那么当您的 CI 尝试为 Windows 构建项目时使用该锁定文件,只要您的任何依赖项具有特定于平台的约束,就会导致错误。但一般来说,除非您确实遇到这样的问题(唯一的解决方案是停止提交锁定文件),否则包含它是安全的,并且有一些好处。 (3认同)
  • 我认为这可能是个坏建议。请参阅下面陆克文的评论。 (3认同)
  • 在我看来,锁定文件唯一有用的地方是在测试和验证构建(手动或在 CI 中)并将锁定文件保存为构建工件之后,这样您就可以安全地恢复到旧的部署。 (2认同)
  • 由于[开发者对向后兼容性的破坏的反应](https://github.com/python-poetry/poetry/issues/7211),关于将 `poetry.lock` 添加到 `.gitignore` 的意见有很大的争议。原因。 (2认同)