首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么pipenv需要Pipfile和Pipfile.lock?

为什么pipenv需要Pipfile和Pipfile.lock?
EN

Stack Overflow用户
提问于 2018-10-23 14:16:22
回答 3查看 6K关注 0票数 5

(我想!)我理解pipenv (和其他venv)背后的原则,并经常使用它们。然而,我从未真正理解为什么pipenv同时需要一个Pipfile和一个Pipfile.lock文件。

这个答案暗示,而本教程

现在,在您的生产环境中获得代码和Pipfile.lock之后,您应该安装最后一个成功的环境: $ pipenv安装-忽略-pipfile

但这并不能解释为什么Pipfile.lock 需要使用。也就是说,.lock文件包含了Pipfile不包含的内容,以及为什么Pipfile足够好,可以与其他开发人员共享:

现在,假设另一个开发人员希望对您的代码添加一些内容。在这种情况下,他们将获得代码,包括Pipfile,并使用以下命令: $ pipenv install -dev

但是,还不足以在生产中复制您的环境吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-23 14:19:49

官方Pipfile项目关于这件事有话要说

Python的具体需求来自于Pipfile。这将包括从哪里获取包以及它们的松散版本约束。 环境的详细信息(所有已安装的带有固定版本的包和其他详细信息)将存储在Pipfile.lock中,以便于复制。此文件将自动生成,用户不应修改该文件。

换句话说,Pipfile是给人的,Pipfile.lock是给计算机的。

在您的Pipfile中,您列出了您想要的内容,并以某种松散的方式定义它们,比如"Django版本2或更高版本“。但这还不足以决定性地再现一个环境。这意味着"Django 2.0.3“还是"Django 2.1.0"?

Pipfile.lock准确地指定了需求,并且精确地指定了依赖项。例如,如果您显式地希望foo并将其放入您的Pipfile中,您的Pipfile.lock将被生成,将其锁定到特定的版本。如果foo本身依赖于bar,而bar依赖于quuxflorp,那么Pipfile.lock文件也会锁定barquuxflorp,因此依赖项中的细微差异不会破坏一切。

票数 19
EN

Stack Overflow用户

发布于 2018-10-23 14:27:29

正如@Chris所说,Pipfile.lock是计算机的,Pipfile是人类的。如果您查看Pipfile.lock文件,您会发现每个依赖项甚至都有sha256代码!

该文件对于人类来说是不可能处理的,您只能处理Pipfile。但是Pipfile不够严格,不能复制一个完全相同的环境。这就是为什么我们还需要一个Pipfile.lock

票数 1
EN

Stack Overflow用户

发布于 2018-10-23 14:35:16

这是一个像npm这样的工具。(也许?)

Pipfile是为了识别项目的依赖关系,您将从Pipfile获得依赖树。

但是根据不同的来源,你会得到不同的包裹。因此,您可以从.lock文件中获得实际的本地依赖项。

例如,在Pipfile中,您可以看到如下内容:

代码语言:javascript
复制
matplotlib = "*"
numpy = "*"

但是在.lock文件中,您将看到实际的依赖关系如下:

代码语言:javascript
复制
"pytz": {
        "hashes": [
            "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053",
            "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277"
        ],
        "version": "==2018.5"
    }

简而言之,Pipfile是更兼容的,但.lock文件是为了获得本地的实际依赖关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52951316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档