pipenv:为什么在安装包时自动创建锁定文件时运行 pipenv lock

San*_*idi 5 python pipenv

管道:

我在https://realpython.com/pipenv-guide/发现要将项目转移到开发我必须运行

pipenv lock 
Run Code Online (Sandbox Code Playgroud)

(更新/创建 Pipfile.lock 文件)

根据我的理解,每当我们使用

pipenv install django
Run Code Online (Sandbox Code Playgroud)

Pipfile.lock 是自动生成/更新的。

那么需要做什么

pipenv lock
Run Code Online (Sandbox Code Playgroud)

不是 Pipfile.lock 总是更新的。

当然,如果我想随时创建 .lock 文件(如果删除的话)我可以这样做 pipenv lock

此外,如果 pipfile 被删除,我可以重新创建它。

小智 6

让我更清楚地解释一下,假设您正在开发一个使用 pandas 版本 2.9.5 的项目,这是 pipfile 中 pandas 的最新版本 - 您将看到条目

熊猫=“*”

这里 * 表示 pandas 的最新版本,但在 pipfile.lock 中它不会用 * 表示,但它将是确定性的 2.9.5 (pipfile.lock 是确定性文件)

今天 2.9.5 是最新版本,但明天我们可能会得到 2.10,它可能与您的项目不兼容。

您不会将 pipfile 从测试环境移动到生产环境 - 您始终将 pipfile.LOCK 移动到生产环境,这可确保版本锁定在特定提到的版本而不是 * (最新版本)。我希望我说清楚了。


小智 5

你是对的,Pipfile.lock在安装虚拟环境或某些软件包时已经创建了。据我了解,目标是在进入生产之前更新所有依赖项。

但我认为根据文档,您不应该这个阶段更新Pipfile.lock,除非您对 CI 管道和测试框架非常有信心,因为它可能会在生产中部署一些未经测试的依赖项版本请记住,它pipenv lock不会安装在您的开发计算机上更新依赖项,如果您重新运行测试,pipenv sync则不会测试更新的依赖项。我更喜欢在早期阶段锁定所有依赖项,然后保留它直到部署,然后部署后更新依赖项并开始下一个版本。

这也是我对 非常小心的原因pip install <package>,因为它还会自动更新所有依赖项,而我更喜欢pipenv尝试保持所有其他依赖项版本不变,除非特别指定或依赖项版本之间发生冲突。


Mah*_*ath -1

它确保在开始/继续安装之前定义依赖项 -

来自 https://pipenv.readthedocs.io/en/latest/basics/#pipenv-lock

$ pipelinenv lock 用于创建 Pipfile.lock,它声明项目的所有依赖项(和子依赖项)、它们的最新可用版本以及下载文件的当前哈希值。这确保了可重复的、最重要的是确定性的构建。