35

我正在研究使用 pipenv 和这里的文档
https://pipenv.pypa.io/en/latest/basics/#importing-from-requirements-txt

它说(强调我的)

请注意,在导入需求文件时,它们通常会固定版本号,您可能不希望这样做

为什么是这样?

我知道 Pipfile.lock 文件将存储我安装的依赖项的特定版本和哈希值,但我不希望能够看到 Pipfile 中安装的特定版本吗?(和我使用 requirements.txt 时一样吗?)

4

3 回答 3

21

文档对您在需求文件中固定版本的可能原因非常固执:它可能来自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 上固定版本并不理想,这是不正确的。完全没问题。

于 2018-06-13T22:39:15.657 回答
13

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

pipenv install requests==2.13.0

这还将更新您的软件包Pipfile以包含版本号,如下所示:

requests = "==2.13.0"

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

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

于 2018-02-08T22:24:11.973 回答
2

我不想看到 Pipfile 中安装的具体版本吗?

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

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

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

于 2017-10-04T18:39:06.837 回答