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.0tea のアップグレードをpipに要求した場合、pipはどうするべきですか?
pipがteaを2.0.0にアップグレードすると、waterもアップグレードする必要があり、coffeeと競合が発生します…
ユーザーに4つの選択肢を与えました。
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のように)。
ユーザーにより多くの制御を与えるために、アップグレードコマンドに追加のフラグを追加する可能性を探る。