为什么版本号不能固定在Pipfile中?

时间:2017-09-27 15:48:07

标签: python pip pipenv

我正在考虑使用pipenv并在这里的文档中 https://pipenv.readthedocs.io/en/latest/basics.html#importing-from-requirements-txt

它说(强调我的)

  

请注意,在导入需求文件时,它们通常具有版本   固定的数字,您可能不想要

这是为什么?

据我所知,Pipfile.lock文件将存储我安装的依赖项的特定版本和哈希,但是我不希望能够看到Pipfile中安装的特定版本? (当我使用requirements.txt时,我的方式相同?)

3 个答案:

答案 0 :(得分:5)

对于您在需求文件中固定版本的可能原因,文档非常自以为是:它可能来自pip freeze > requirements.txt

当然,您要在Pipfile中指定部分或全部版本范围,只是很多人将它们固定在requirements.txt中,因为他们过去常常对待它就像一种Pipfile.lock,指定甚至不直接依赖的软件包版本。当然,如果你没有遵循这种做法,你就不必担心这个警告。

这很可能是Kenneth Reitz(Pipenv创作者)自己以前做过的结果,正如他在博客文章A Better Pip Workflow中所提到的那样。关于此事的澄清已经在官方repository中被问及并回答。

2018年6月更新

该消息过去曾被pipenv命令打印为警告,但已替换为

requirements.txt found, instead of Pipfile! Converting…
Warning: Your Pipfile now contains pinned versions, if your requirements.txt did.
We recommend updating your Pipfile to specify the "*" version, instead.

稍微友好一些,但我认为它仍隐含地说Pipfile上的固定版本并不理想,这是不正确的。它完全没问题。

答案 1 :(得分:3)

我不确定以前是什么情况,但是,the latest documentation表示您可以在安装软件包时指定软件包的版本号,如下所示:

pipenv install requests==2.13.0

这也会更新Pipfile中的包以包含版本号,如下所示:

requests = "==2.13.0"

您可以为要指定版本号的每个软件包执行此操作,包括以前安装的软件包。

我认为您可以手动编辑Pipfile来执行此操作,但我不确定这是否正确。

答案 2 :(得分:1)

  

我不希望能够看到Pipfile中安装的具体版本吗?

锁定文件用于跟踪实际安装的内容,是生成确定性构建的关键。 Pipfile.lock旨在与Pipfile一起提交到项目。还有一种观点认为,理想的工作流程是使用“ pipenv lock 来编译您的开发环境中的依赖项,并将已编译的Pipfile.lock部署到您的所有生产环境中,以实现可重现的构建。”

您希望在Pipfile中指定某些版本。例如,Django的所有版本都低于某个主要版本可能是一个好主意。

同样明白,截至目前,pipenv仍处于积极发展阶段,因此其中一些想法仍在制定中。可能会有一些变化。