Pipenv:
我在https://realpython.com/pipenv-guide/发现必须将项目转移到开发中
pipenv lock
(用于更新/创建Pipfile.lock文件)
根据我的理解,每当我们使用以下方法安装任何软件包时
pipenv install django
Pipfile.lock是自动生成/更新的。
那么需要做什么
pipenv lock
不是Pipfile.lock总是更新的。
当然,如果我想随时创建.lock文件(偶然删除它),我可能会pipenv lock
如果偶然删除了pipfile,我可以重新创建它吗。
答案 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 移动到生产环境,这确保版本被锁定在特定提到的版本而不是 *(最新版本)。 我希望我清楚。