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 应该做什么。
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%)。
在表示经常或非常经常使用 --force-resinstall
的受访者中:
54.54% (6/11) 的受访者认为 Pip 应该安装 requests 的相同版本,即
--force-reinstall
不应该隐式升级。45.45% (5/11) 的受访者认为 Pip 应该将 requests 升级到最新版本,即
--force-reinstall
应该隐式升级。
受访者认为 --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 的用户没有明确表示对不同行为的偏好。
在这种情况下,我们建议升级 帮助文本,使其更明确。
旧的帮助文本
即使包已经是最新的,也要重新安装所有包。
新的帮助文本
重新安装包及其依赖项,即使它们已经是最新的。如果包不是最新的,则将它们升级到最新版本(除非使用版本规范)。