pip --force-reinstall

问题

目前,当执行 pip install [package-name] --force-reinstall 时,Pip 不会重新安装之前安装的版本,而是会安装最新版本的包。

pip install [package name] --force-reinstall 等同于 pip [package name] --upgrade

我们想了解用户是否理解(或希望)这种隐式行为。

更多信息可以在 这个 GitHub 问题 中找到。

跳至建议

研究

为了帮助我们了解用户对 --force-reinstall 选项的期望,我们发布了一个调查问卷,其中包含以下场景:

您已安装 requests 包及其依赖项

requests==2.22.0
asgiref==3.2.10
certifi==2020.6.20
chardet==3.0.4
Django==3.1
idna==2.8
pytz==2020.1
sqlparse==0.3.1
urllib3==1.25.10

您运行“pip install requests --force-reinstall”。应该发生什么?

受访者可以选择以下选项之一:

  • Pip 重新安装 requests 的相同版本,Pip 不会重新安装 requests 的依赖项。

  • Pip 重新安装 requests 及其依赖项,将所有这些包更新到最新的兼容版本

  • Pip 重新安装 requests 及其依赖项,保持每个包的版本相同

  • Pip 重新安装 requests,并将其更新到最新版本。Pip 会更新 requests 的依赖项,以支持更新的版本。

  • 我不知道 Pip 应该做什么

  • 我不理解这个问题

  • 其他(允许受访者提供自己的答案)

我们还询问了 pip --force-reinstall 的实用性,以及其使用频率。

结果

总共收到 190 份调查问卷,其中 186 人告诉我们当执行 --force-reinstall 选项时,Pip 应该做什么。

pie chart with survey results

  • 31.7% (59/186) 的受访者表示,Pip 应该重新安装 requests 及其依赖项,保持每个包的版本相同。

  • 28% (52/186) 的受访者表示,Pip 应该重新安装 requests,并将其更新到最新版本,Pip 会更新 requests 的依赖项,以支持更新的版本。

  • 15.6% (29/186) 的受访者表示,Pip 应该重新安装 requests 及其依赖项,将所有这些包更新到最新的兼容版本。

  • 14% (26/186) 的受访者表示,Pip 应该重新安装 requests 的相同版本,并且不重新安装 requests 的依赖项。

如果我们将响应分为“升级”或“不升级”(忽略无法分组的响应),我们发现:

  • 46.32% (88/186) 的受访者认为 Pip 应该安装 requests 的相同版本,即 --force-reinstall 不应该隐式升级。

  • 43.16% (82/186) 的受访者认为 Pip 应该将 requests 升级到最新版本,即 --force-reinstall 应该隐式升级。

大多数受访者“几乎从不”使用 --force-reinstall (65.6%)。

screenshot of survey question of how often users use --force-reinstall bar chart of how often users use --force-reinstall

在表示经常或非常经常使用 --force-resinstall 的受访者中:

  • 54.54% (6/11) 的受访者认为 Pip 应该安装 requests 的相同版本,即 --force-reinstall 不应该隐式升级。

  • 45.45% (5/11) 的受访者认为 Pip 应该将 requests 升级到最新版本,即 --force-reinstall 应该隐式升级。

受访者认为 --force-reinstall 的实用性低于有用性。

screenshot of survey question of how useful users find --force-reinstall bar chart of how useful users find --force-reinstall

在表示 --force-resinstall 有用或非常有用的受访者中:

  • 38.46% (20/52) 的受访者认为 Pip 应该安装 requests 的相同版本,即 --force-reinstall 不应该隐式升级。

  • 50% (26/52) 的受访者认为 Pip 应该将 requests 升级到最新版本,即 --force-reinstall 应该隐式升级。

建议

鉴于此选项并不经常使用,并且没有被强烈评为有用,我们建议开发团队考虑如果他们希望减少维护开销,则删除 --force-reinstall

在这种情况下,我们建议当用户尝试使用 --force-reinstall 时显示以下消息:

错误: Pip install --force-reinstall 选项不再存在。使用 pip uninstall 然后 pip install 来替换最新的包,或使用 pip install --upgrade 来将您的包更新到最新的可用版本。

如果 Pip 开发团队希望保留 --force-resintall,我们建议维护当前的(隐式升级)行为,因为 Pip 的用户没有明确表示对不同行为的偏好。

在这种情况下,我们建议升级 帮助文本,使其更明确。

旧的帮助文本

即使包已经是最新的,也要重新安装所有包。

新的帮助文本

重新安装包及其依赖项,即使它们已经是最新的。如果包不是最新的,则将它们升级到最新版本(除非使用版本规范)。