pipのsetuptoolsは依存モジュールのインストール時にメジャーバージョンを気にしない
例えば、scikit-surpriseをインストールするとき、scikit-surpriseはnumpy 2系以降には対応していないのに、scikit-surpriseをビルドする時にはnumpyの最新版が使用されてしまう。 しかも、pip install numpy==1.26.4などで、1系の最新版を手動でインストールしたとしても、2系の最新版に入れ替えられてしまう。
code:txt
Collecting scikit-surprise
Using cached scikit_surprise-1.1.4-cp312-cp312-win_amd64.whl
Collecting joblib>=1.2.0 (from scikit-surprise)
Using cached joblib-1.5.1-py3-none-any.whl.metadata (5.6 kB)
Collecting numpy>=1.19.5 (from scikit-surprise)
Using cached numpy-2.3.0-cp312-cp312-win_amd64.whl.metadata (60 kB)
Collecting scipy>=1.6.0 (from scikit-surprise)
Using cached scipy-1.15.3-cp312-cp312-win_amd64.whl.metadata (60 kB)
Using cached joblib-1.5.1-py3-none-any.whl (307 kB)
Using cached numpy-2.3.0-cp312-cp312-win_amd64.whl (12.7 MB)
Using cached scipy-1.15.3-cp312-cp312-win_amd64.whl (41.0 MB)
Installing collected packages: numpy, joblib, scipy, scikit-surprise
Attempting uninstall: numpy
Found existing installation: numpy 1.26.4
Uninstalling numpy-1.26.4:
Successfully uninstalled numpy-1.26.4
Attempting uninstall: joblib
Found existing installation: joblib 1.5.1
Uninstalling joblib-1.5.1:
Successfully uninstalled joblib-1.5.1
Attempting uninstall: scipy
Found existing installation: scipy 1.15.3
Uninstalling scipy-1.15.3:
Successfully uninstalled scipy-1.15.3
Attempting uninstall: scikit-surprise
Found existing installation: scikit-surprise 1.1.4
Uninstalling scikit-surprise-1.1.4:
Successfully uninstalled scikit-surprise-1.1.4
Successfully installed joblib-1.5.1 numpy-2.3.0 scikit-surprise-1.1.4 scipy-1.15.3
これを解決するには、インストールしようとしているモジュールのpyproject.tomlで、依存モジュールのバージョンの下限だけでなく上限も付ける必要がある。
code:diff
dependencies = [
"joblib>=1.2.0",
- "numpy>=1.19.5",
+ "numpy>=1.19.5,<2"
"numpy>=1.19.5",
"scipy>=1.6.0"
]
build-backend = "setuptools.build_meta"
scikit-surpriseの場合は、miguelgfierroによるフォークがpyproject.tomlでバージョンの上限を付けたものになっている。本家版にも修正のPRも出ているが、2025/6/19現在マージされていない。