以下の実行時にnumpyのインストールでエラーとなった。
pip install pandas==1.3.4
1.3.4は別の環境にて最近インストールした記憶があり、そちらは普通に成功していたはずだったので違いを調べてみたところpipのversionが違った。
失敗したのはpip1.20.1で、成功したのはpip1.21.0だった。
なのでその違いを調べて見るとどうやらパッケージの依存関係を解決するためのresolverが変更された模様。
https://www.python.jp/pages/2020-10-07-new-pip-deps.html
1.20.3以前はそのときinstallしようとしているパッケージの依存関係のみを考慮して条件を満たすversionのものを入れており、それ以前に入れたパッケージの依存関係を壊す可能性があった。一方、1.20.3以降では入っているものとこれから入れるものの全体を考慮してパッケージのversionを決める。
1.21系では新しい方法がデフォルトで使われるため上記のように挙動が変わったと思われる。
こちらにpackage manager全般の話として詳しく書いている記事があった。
https://vaaaaaanquish.hatenablog.com/entry/2021/03/29/221715#2020-resolver
backtrackingというアルゴリズムで依存解決をしているようで、各パッケージとそのversionの組み合わせを深さ優先探索して必要な依存関係に適するものを探す、という形の模様。backtrackingついてはこちらがわかりやすかった。
https://www.simplilearn.com/tutorials/data-structure-tutorial/backtracking-algorithm
実際に採用されたのはこちらのissueにかかれている通りでresolvelibというパッケージになっている。
https://github.com/pypa/pip/issues/7406#issuecomment-608075215