pip --force-reinstall

問題点

現在、pip install [パッケージ名] --force-reinstall が実行されると、pip は以前にインストールされたバージョンのパッケージを再インストールするのではなく、利用可能な最新バージョンでパッケージをインストールします。

つまり、pip install [パッケージ名] --force-reinstallpip [パッケージ名] --upgrade のように動作します。

ユーザーがこの暗黙的な動作を理解しているか(または望んでいるか)を把握する必要があります。

詳細については、この GitHub Issue を参照してください。

推奨事項にスキップ

調査

--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 は requests の依存関係を再インストールしません。

  • pip は requests とその依存関係を再インストールし、これらのパッケージをすべて最新の互換性のあるバージョンに更新します

  • pip は requests とその依存関係を再インストールし、すべてのパッケージを同じバージョンに維持します

  • pip は requests を再インストールし、最新バージョンに更新します。pip は新しいバージョンをサポートするために必要に応じて requests の依存関係を更新します。

  • pip が何をすべきかわかりません

  • 質問の意味がわかりません

  • その他 (回答者が独自の回答を提供できる)

また、pip --force-reinstall がどれほど役立つか、およびどれくらいの頻度で使用されるかについても質問しました。

結果

合計 190 件の回答がアンケートに寄せられ、186 人が --force-reinstall オプションが実行された場合に pip が何をすべきかを教えてくれました。

pie chart with survey results

  • 回答者の 31.7% (186 人中 59 人) が、pip は requests とその依存関係を再インストールし、すべてのパッケージを同じバージョンに維持するべきだと回答しました

  • 回答者の 28% (186 人中 52 人) が、pip は requests を再インストールし、最新バージョンに更新し、pip は新しいバージョンをサポートするために必要に応じて requests の依存関係を更新するべきだと回答しました。

  • 回答者の 15.6% (186 人中 29 人) が、pip は requests とその依存関係を再インストールし、これらのパッケージをすべて最新の互換性のあるバージョンに更新するべきだと回答しました

  • 回答者の 14% (186 人中 26 人) が、pip は同じバージョンの requests を再インストールし、requests の依存関係を再インストールするべきではないと回答しました

回答を「アップグレード」または「アップグレードしない」にグループ化すると(グループ化できない回答は無視します)、次のようになります。

  • 回答者の 46.32% (186 人中 88 人) が、pip は同じバージョンの requests をインストールするべきであると考えました。つまり、--force-reinstall は暗黙的にアップグレードすべきではありません

  • 回答者の 43.16% (186 人中 82 人) が、pip は requests を最新バージョンにアップグレードするべきであると考えました。つまり、--force-reinstall は暗黙的にアップグレードすべきです。

ほとんどの回答者は、--force-reinstall を「ほぼ使用しない」(65.6%)と回答しています。

screenshot of survey question of how often users use --force-reinstall bar chart of how often users use --force-reinstall

--force-resinstall を頻繁または非常に頻繁に使用すると回答した回答者のうち

  • 回答者の 54.54% (11 人中 6 人) が、pip は同じバージョンの requests をインストールするべきであると考えました。つまり、--force-reinstall は暗黙的にアップグレードすべきではありません

  • 回答者の 45.45% (11 人中 5 人) が、pip は requests を最新バージョンにアップグレードするべきであると考えました。つまり、--force-reinstall は暗黙的にアップグレードすべきです。

回答者は、--force-reinstall を便利であるよりも便利でないと考えています。

screenshot of survey question of how useful users find --force-reinstall bar chart of how useful users find --force-reinstall

--force-resinstall が便利であるまたは非常に便利であると回答した回答者のうち

  • 回答者の 38.46% (52 人中 20 人) が、pip は同じバージョンの requests をインストールするべきであると考えました。つまり、--force-reinstall は暗黙的にアップグレードすべきではありません

  • 回答者の 50% (52 人中 26 人) が、pip は requests を最新バージョンにアップグレードするべきであると考えました。つまり、--force-reinstall は暗黙的にアップグレードすべきです。

推奨事項

このオプションは定期的に使用されておらず、便利であると強く評価されていないため、開発チームはメンテナンスのオーバーヘッドを削減したい場合は --force-reinstall の削除を検討することをお勧めします。

この場合、ユーザーが --force-reinstall を使用しようとしたときに、次のメッセージを表示することをお勧めします。

エラー: pip install --force-reinstall オプションは存在しなくなりました。最新のパッケージを置き換えるには pip uninstall の後に pip install を使用するか、パッケージを最新の利用可能なバージョンに更新するには pip install --upgrade を使用してください。

pip 開発チームが --force-resintall を保持したい場合は、pip のユーザーが異なる動作に対する明確な選好を示していないため、現在の(暗黙的なアップグレード)動作を維持することをお勧めします。

この場合、ヘルプテキスト をより明確にすることをお勧めします。

古いヘルプテキスト

すべてのパッケージがすでに最新の状態であっても、再インストールします。

新しいヘルプテキスト

パッケージとその依存関係がすでに最新の状態であっても、再インストールします。パッケージが最新の状態でない場合は、(バージョン指定子が使用されていない限り)これらを最新バージョンにアップグレードします。