提供覆寫以安裝具有衝突依賴項的套件¶
問題¶
目前,當使用者在他們的專案中有相依性衝突時,他們可能不會意識到問題所在,因為 pip 會安裝衝突套件而不會產生錯誤。
新的 pip 解決器較為嚴格,將不再允許使用者安裝具有衝突相依項的套件。
因此,當 pip 拒絕安裝衝突套件時,一些使用者可能會認為 pip 的較新版本「損壞」。
由於這個原因,pip 團隊想知道他們是否應該提供允許使用者安裝衝突套件的覆寫。
研究¶
以下是我們的問卷調查簡介
假設你擁有套件茶和咖啡茶 1.0.0 相依於 water <1.12。
咖啡 1.0.0 相依於 water>=1.12安裝茶 1.0.0 和咖啡 1.0.0 會造成衝突,因為它們個別仰賴於 water 的不同版本 - 這稱為「相依性衝突」。
pip 團隊最近更改了 pip 解析相依性衝突的方式。新的實作比以前更嚴格:pip 將不再安裝存在相依性衝突的套件 - 而會顯示錯誤。
此問卷調查的目的是收集意見回饋,探討提供一個能覆寫此行為的方式。
所有問題都是非必要的,請盡可能提供更多資訊。
然後我們詢問使用者
pip 是否應提供允許使用者在存在相依性衝突時安裝套件的覆寫
他們回答「是」或「否」的原因是什麼
對於回答「是」的使用者,我們詢問
他們會何時使用覆寫
他們使用覆寫的頻率會如何
如果 pip 沒有提供覆寫,找到解決方法的難度會如何
他們偏好的語法是什麼
結果¶
總計,我們收到 415 份問卷回應。
絕大多數(>70%)的受訪者表示,他們需要某種允許他們在相依性衝突時安裝套件的覆寫。儘管需要此功能,但大多數受訪者表示,如果此功能存在,他們會「不常」使用它,這表示這是一個非關鍵性的進階功能,對日常使用來說並不重要。儘管如此,由於找到解決方法的難度為難或非常難(>60%),我們建議 pip 應提供覆寫功能(見下方的建議)。
超過半數的受訪者表示,當同時安裝多個套件並且有衝突的依賴項時,pip install tea coffee --ignore-conflicts
是此指令最理想的語法。在使用 pip install —-ignore-conflicts
指令時,大多數(>48%)的受訪者表示,他們希望 pip 安裝到衝突依賴項的最新版本。
大部分受訪者建議預設安裝最新版本比較安全,因為可能包含安全性修復或功能,且要自行複製這些內容很困難。他們也相信這些依賴項在很大程度上會向後相容。不過,他們表示,有必要找到一個方法來覆寫此預設行為這點非常重要,以防需要使用衝突套件的較舊版本。
建議¶
根據這項研究,我們建議 pip 團隊
實作一個
--ignore-conflicts
選項,讓使用者可以安裝具有衝突依賴項的套件確保
--ignore-conflicts
安裝衝突套件的最新版本。例如,對於衝突的套件water<1.1.2
和water≥1.1.2
,pip 應該優先安裝water≥1.1.2
。允許使用者透過指定衝突套件的版本來覆寫此預設行為。例如,
pip install tea coffee water==1.1.1 --ignore-conflicts
向使用者警告,他們使用了
--ignore-conflicts
旗標,這可能會導致其程式產生意外的行為