(我认为[!])我理解背后的原理pipenv
(以及其他 venv)并经常使用它们。然而我一直不明白为什么pipenv
需要两个Pipfile
and a Pipfile.lock
file.
这个答案 https://stackoverflow.com/a/49867443/889604意味着,并且本教程 https://realpython.com/pipenv-guide/ says
现在,一旦您在生产中获得代码和 Pipfile.lock
环境,应该安装上次成功的环境
记录:
$ pipenv install --ignore-pipfile
但这并没有解释why Pipfile.lock
needs要使用的。即什么.lock
文件包含该内容Pipfile
不,为什么是Pipfile
足够好,可以与其他开发人员共享:
现在假设另一位开发人员想要对您的内容进行一些添加
代码。在这种情况下,他们将获得代码,包括
Pipfile,并使用以下命令:
$ pipenv install --dev
但还不足以用于在生产中复制您的环境吗?
官方 Pipfile 项目对此有话要说 https://github.com/pypa/pipfile#the-concept:
Python 应用程序的具体要求来自Pipfile
。这将包括应该从哪里获取包以及它们的宽松版本约束。
环境的详细信息(所有已安装的软件包以及固定版本和其他详细信息)将存储在Pipfile.lock
,为了重现性。该文件将自动生成,用户不应修改。
换句话说,Pipfile
is for people and Pipfile.lock
is for 电脑.
In your Pipfile
你列出你想要的东西,并以一种有点松散的方式定义它们,比如“Django 版本 2 或更高版本”。但这还不足以确定性地重现环境。这是否意味着“Django 2.0.3”或“Django 2.1.0”?
Pipfile.lock
准确地指定了要求,并且还指定了依赖关系确切地。例如,如果您明确想要foo
并将其放入你的Pipfile
, your Pipfile.lock
将生成将其锁定到特定版本。如果foo
本身取决于bar
, and bar
依赖于取决于quux
and florp
, the Pipfile.lock
文件将被锁定bar
, quux
, and florp
也下降了,所以依赖关系的微小差异不会破坏事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)