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 應該做什麼。
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
在表示經常或非常經常使用 --force-resinstall
的受訪者中
54.54% (6/11) 的受訪者認為 pip 應安裝相同版本的請求 - 也就是
--force-reinstall
不應 隱含升級45.45% (5/11) 的受訪者認為 pip 應將請求升級至最新版本 - 也就是
--force-reinstall
應 隱含升級
受訪者認為 --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 使用者並未明確表示偏好不同的行為。
本例中,我們建議升級說明文字,使其較為明確
舊說明文字
重新安裝所有套件,即使它們已為最新版本。
新說明文字
重新安裝套件及其相依關係,即使它們已為最新版本。其中尚未為最新版本的套件,將升級為最新版本(除非使用版本指定符)。