Python 为什么版本号不应该固定在PIP文件中?

Python 为什么版本号不应该固定在PIP文件中?,python,pip,pipenv,Python,Pip,Pipenv,我正在研究如何使用pipenv和这里的文档 上面写着(我的) 请注意,在导入需求文件时,它们通常具有版本 固定的数字,您可能不想要 为什么会这样 我知道Pipfile.lock文件将存储我安装的依赖项的特定版本和散列,但我不想看到Pipfile中安装的依赖项的特定版本吗?(与我使用requirements.txt时的方式相同?) 我不想看到PIP文件中安装的特定版本吗 锁文件用于跟踪实际安装的内容,是生成确定性构建的关键。lock旨在与Pipfile一起提交到项目中。还有一种观点认为,理想的工

我正在研究如何使用pipenv和这里的文档

上面写着(我的)

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

为什么会这样

我知道Pipfile.lock文件将存储我安装的依赖项的特定版本和散列,但我不想看到Pipfile中安装的依赖项的特定版本吗?(与我使用requirements.txt时的方式相同?)

我不想看到PIP文件中安装的特定版本吗

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

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


同时也要了解到,到目前为止,pipenv仍在积极开发中,因此其中一些想法仍在制定中。可能会有一些变化。

我不确定以前的情况是什么,但是,上面说可以在安装软件包时指定其版本号,如下所示:

pipenv install requests==2.13.0
requests = "==2.13.0"
这还将更新
Pipfile
中的软件包,以包含版本号,如下所示:

pipenv install requests==2.13.0
requests = "==2.13.0"
如果以前安装过要指定版本号的每个软件包,则可以对其执行此操作


我认为您可以手动编辑您的
pip文件来完成此操作,尽管我不确定这是否正确。

文档对您将版本固定在需求文件上的可能原因持有相当的意见:它可能来自
pip freeze>requirements.txt

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

这很可能是Kenneth Reitz(Pipenv的创作者)自己之前所做的,正如他在博客中所提到的。他已经在官方文件中要求并回答了关于这一问题的澄清

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上是不理想的,这是不正确的。非常好。

不仅很好,而且我认为这是必要的。目前我在
Pipfile
中工作时没有固定版本,每次我执行
pipenv lock
(每隔几天),我的
Pipfile.lock
中都会有很多更改,这让我感到困惑,无法理解发生了什么。我现在将转到固定的
Pipfile
(使用最新的
Pipfile.lock
中的版本),从现在起,我希望我能更好地控制最终要安装的内容。这也是我没有得到的。为什么版本不固定在Pipfile中?还有,有没有一种方法可以自动锁定它们,而不必逐个编写它们?@wtfzambo我不会锁定每个依赖项,因为我确实想在偶尔运行
pipenv lock
时更新其中一些。我更喜欢锁定所有版本,这样我就可以知道依赖项升级没有引入错误,我不喜欢随机更新依赖项,我喜欢在检查它们的更改日志/发行说明后逐个升级。是的,手动编辑Pipfile是可以的,但不应触摸Pipfile.lock文件。不能触摸Pipline.lock文件。编辑Pipfile后,我们可以删除Pipfile.lock并运行
pipenv install
重新生成文件