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 產生衝突…

我們提供使用者四個選項

  1. 升級 tea 和 water。顯示一個警告訊息,說明 coffee 現在有未滿足的要求。

  2. 自動將 coffee 升級到 2.0.0

  3. 不要安裝任何東西。告訴使用者所有內容均已是最新的(因為他們已安裝的 tea 版本是最新的版本且沒有衝突)。

  4. 不要安裝任何東西。顯示一個錯誤訊息,說明升級將導致不相容性。

我們允許使用者張貼自己的解決方案,並詢問他們為何做出該項決定。

結果

總共,我們收到 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 團隊已針對開發團隊提出以下建議