我正在研究使用 pipenv 和这里的文档
https://pipenv.pypa.io/en/latest/basics/#importing-from-requirements-txt
它说(强调我的)
请注意,在导入需求文件时,它们通常会固定版本号,您可能不希望这样做
为什么是这样?
我知道 Pipfile.lock 文件将存储我安装的依赖项的特定版本和哈希值,但我不希望能够看到 Pipfile 中安装的特定版本吗?(和我使用 requirements.txt 时一样吗?)
我正在研究使用 pipenv 和这里的文档
https://pipenv.pypa.io/en/latest/basics/#importing-from-requirements-txt
它说(强调我的)
请注意,在导入需求文件时,它们通常会固定版本号,您可能不希望这样做
为什么是这样?
我知道 Pipfile.lock 文件将存储我安装的依赖项的特定版本和哈希值,但我不希望能够看到 Pipfile 中安装的特定版本吗?(和我使用 requirements.txt 时一样吗?)
文档对您在需求文件中固定版本的可能原因非常固执:它可能来自pip freeze > requirements.txt
.
当然,您会希望在 中指定部分或全部版本范围,Pipfile
只是很多人将它们固定在 中,requirements.txt
因为他们曾经将其视为一种Pipfile.lock
,指定甚至不是直接依赖的包的版本。自然,如果您不遵循此做法,则不必担心该警告。
这很可能是 Kenneth Reitz(Pipev 的创建者)自己之前这样做的结果,正如他在博客文章A Better Pip Workflow中提到的那样。他已经在官方存储库中对此事进行了澄清。
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 上固定版本并不理想,这是不正确的。完全没问题。
我不确定以前是什么情况,但是,最新的文档说您可以在安装软件包时指定软件包的版本号,如下所示:
pipenv install requests==2.13.0
这还将更新您的软件包Pipfile
以包含版本号,如下所示:
requests = "==2.13.0"
您可以为要为其指定版本号的每个软件包执行此操作,包括您以前是否安装过它们。
我认为您可以手动编辑您的Pipfile
来执行此操作,尽管我不确定这是否正确。
我不想看到 Pipfile 中安装的具体版本吗?
锁定文件用于跟踪实际安装的内容,是生成确定性构建的关键。Pipfile.lock 旨在与 Pipfile 一起提交到项目中。还有一种观点认为,理想的工作流程是使用“ pipenv lock来编译您对开发环境的依赖项,并将编译后的 Pipfile.lock 部署到您的所有生产环境以进行可重复的构建。”
您将要在 Pipfile 中指定某些版本。例如,低于某个主要版本的所有 Django 版本可能是一个好主意。
还要了解,到目前为止,pipenv 仍在积极开发中,因此其中一些想法仍在制定中。可能会有一些变化。