pipenv:即使我安装了软件包,在自动创建锁定文件时为什么还要运行pipenv锁定

时间:2018-10-08 08:55:31

标签: python pipenv

Pipenv:

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

pipenv lock 

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

根据我的理解,每当我们使用以下方法安装任何软件包时

pipenv install django

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

那么需要做什么

pipenv lock

不是Pipfile.lock总是更新的。

当然,如果我想随时创建.lock文件(偶然删除它),我可能会pipenv lock

如果偶然删除了pipfile,我可以重新创建它吗。

3 个答案:

答案 0 :(得分:0)

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

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

  

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

答案 1 :(得分:0)

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

但是我认为,在此阶段,您不应该不要更新Pipfile.lock,除非您对CI管道和测试框架非常有信心,因为它可能会部署在生产中,某些未经测试的依赖版本请记住,pipenv lock不会在您的开发计算机上安装更新依赖,并且如果您在没有pipenv sync的情况下重新运行测试,则不会测试更新的依赖。我更喜欢尽早锁定所有依赖关系,然后将其锁定直到部署,然后在部署之后 更新依赖关系并开始下一个版本。

这也是为什么我对pip install <package>非常谨慎的原因,因为它也会自动更新 all 您的依赖关系,而我希望pipenv尝试保留所有其他依赖性版本不变,除非特别指定或依赖性版本之间存在冲突。

答案 2 :(得分:0)

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

熊猫 = "*"

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

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

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