pip 升級衝突¶
問題¶
目前,pip 在使用者要求升級套件時不會考慮已安裝的套件。這可能會為 pip 使用者造成相依性的衝突。
調查¶
我們發布了一份調查,詢問使用者將如何解決下列情境
想像一下您有下列相依性的 tea 和 coffee 套件tea 1.0.0 - 相依於 water<1.12
tea 2.0.0 - 相依於 water>=1.12
coffee 1.0.0 - 相依於 water<1.12
coffee 2.0.0 - 相依於 water>=1.12您已安裝下列套件
tea 1.0.0
coffee 1.0.0
water 1.11.0您要求 pip 升級 tea。pip 應該怎麼做?
如果 pip 將 tea 升級到 2.0.0,water 也必須升級,如此會與 coffee 產生衝突…
我們提供使用者四個選項
升級 tea 和 water。顯示一個警告訊息,說明 coffee 現在有未滿足的要求。
自動將 coffee 升級到 2.0.0
不要安裝任何東西。告訴使用者所有內容均已是最新的(因為他們已安裝的 tea 版本是最新的版本且沒有衝突)。
不要安裝任何東西。顯示一個錯誤訊息,說明升級將導致不相容性。
我們允許使用者張貼自己的解決方案,並詢問他們為何做出該項決定。
結果¶
總共,我們收到 693 個回應,其中 407 個回應包含了為何特定解決方案最佳的說明。
497 個回應 (71.7%) 偏好選項 4:pip 不應安裝任何東西並應顯示錯誤訊息
102 個回應 (14.7%) 偏好選項 2:pip 應升級 package_coffee
79 個回應 (11.4%) 偏好選項 1:pip 應升級 tea 和 water
15 個回應 (2.2%) 偏好選項 3:pip 不應安裝任何東西並應告訴使用者所有內容均已是最新的
從回答特定解決方案為何最佳的 407 個回應中,出現了以下幾個關鍵主題
「明確勝於含糊」- pip 不應造成使用者不理解、未預料到,且未同意的「副作用」
pip 應盡其所能避免造成衝突(pip 不應「中斷」開發環境)
告訴使用者所有內容均已是最新的(選項 3)具有誤導性 / 不誠實性
pip 可透過以下方式增加靈活性
允許使用者選擇他們要如何解決此情況
允許使用者覆寫預設行為(使用標記)
建議事項¶
根據這項研究的結果,pip UX 團隊已針對開發團隊提出以下建議
於當前行為持續存在的同時,在產生衝突時警告使用者
變更目前行為,讓 pip 在更新其他套件時,考量已安裝的套件。當 pip 預測到依賴關係衝突時,對使用者顯示警告(如選項 4 所述)
探討在更新命令中新增其他旗標的可能性,讓使用者可以進一步控制