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 不重新安裝 request 的依賴項。

  • pip 重新安裝 requests 及其依賴項,將所有這些套件更新至最新相容版本。

  • pip 重新安裝 requests 及其依賴項,維持每個套件的版本不變。

  • pip 重新安裝 requests,更新至其最新版本。pip 在有必要時更新 request 的依賴項以支援較新版本。

  • 我不知道 pip 應該做什麼。

  • 我不了解這個問題。

  • 其他(允許受訪者提供自己的答案)

我們還詢問了 pip --force-reinstall 有多有用,以及使用頻率。

結果

我們在調查中總共收到 190 份回應,其中 186 人告訴我們當執行 --force-reinstall 選項時,pip 應該做什麼。

pie chart with survey results

  • 31.7%(186 人中 59 人)受訪者表示,pip 應該重新安裝 requests 及其依賴項,維持每個套件的版本不變。

  • 28%(186 人中 52 人)受訪者表示,pip 應該重新安裝 request,更新至最新版本,pip 在有必要時更新 request 的依賴項以支援較新版本。

  • 15.6%(186 人中 29 人)受訪者表示,pip 應該重新安裝 requests 及其依賴項,將所有這些套件更新至最新相容版本。

  • 14% (26/186) 的受訪者表示,pip 應重新安裝相同版本的請求,而不要重新安裝請求的依賴項

如果我們將回應分為「升級」或「不升級」(忽略無法分組的回應),我們發現

  • 46.32% (88/186) 的受訪者認為 pip 應安裝相同版本的請求 - 也就是 --force-reinstall 不應 隱含升級

  • 43.16% (82/186) 的受訪者認為 pip 應將請求升級至最新版本 - 也就是 --force-reinstall 隱含升級

多數受訪者「幾乎從未使用」(65.6%)--force-reinstall

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 應安裝相同版本的請求 - 也就是 --force-reinstall 不應 隱含升級

  • 45.45% (5/11) 的受訪者認為 pip 應將請求升級至最新版本 - 也就是 --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 應安裝相同版本的請求 - 也就是 --force-reinstall 不應 隱含升級

  • 50% (26/52) 的受訪者認為 pip 應將請求升級至最新版本 - 也就是 --force-reinstall 隱含升級

建置建議

鑒於此選項並非定期使用,而且實用度評分不高,我們建議開發團隊考量移除 --force-reinstall ,以便減輕維護工作量

另外,建議當使用者嘗試使用 --force-reinstall 時,顯示以下訊息

錯誤:pip install --force-reinstall 選項已不存在。請使用 pip uninstall 再使用 pip install 來取代最新的套件,或使用 pip install --upgrade 來將你的套件更新至最新可用的版本。

如果 pip 開發團隊希望保留 --force-resintall,我們建議維持目前的行為(隱含升級),因為 pip 使用者並未明確表示偏好不同的行為。

本例中,我們建議升級說明文字,使其較為明確

舊說明文字

重新安裝所有套件,即使它們已為最新版本。

新說明文字

重新安裝套件及其相依關係,即使它們已為最新版本。其中尚未為最新版本的套件,將升級為最新版本(除非使用版本指定符)。