PyPIのsklearnパッケージのお言葉です。
use
pip install scikit-learnrather thanpip install sklearn
目次
scikit-learnのインストール
機械学習でお世話になるライブラリ、scikit-learn1。
インストールはpip install scikit-learnです。
Pythonコードのimportではsklearnという名前ですが、インストールはpip install scikit-learnです。
2022年からpip install sklearnはdeprecatedとなっています(0.0.post1)。
なぜsklearnがPyPIに登録されているのか
deprecateするなら、なんでPyPIに置いてあるのだろうと思いました。
この理由も記載されています(Reason for the deprecation)。
sklearn package on PyPI exists to prevent malicious actors from using the sklearn package, since sklearn (the import name) and scikit-learn (the project name) are sometimes used interchangeably.
私の解釈混じりで
- scikit-learnを使ったコードでは、
sklearnという名前でimportする(前述の通り)- scikit-learnユーザがimportする名前で、
pip install sklearnとする可能性がある
- scikit-learnユーザがimportする名前で、
- もし仮にPyPIのsklearnとして悪意あるパッケージが置かれたならば、
pip install sklearnしたばかりに被害を被ってしまう- そうならないようにscikit-learn開発者がPyPIのsklearnも登録している
- sklearnは
pip install sklearnでscikit-learnがインストールできるように置かれた- 2022年以降ではPyPIのsklearnがdeprecated(代わりに
pip install scikit-learn)
- 2022年以降ではPyPIのsklearnがdeprecated(代わりに
インストールで指定するライブラリの名前と、importで指定する名前が違うのも、考えものなのですね
書いたきっかけ
🤗 evaluateを使っていてpip install sklearnを目撃しました。
- Python 3.11.8
- evaluate 0.4.3
環境構築ではpip install evaluateしただけ
>>> import evaluate >>> metric = evaluate.load("accuracy") Downloading builder script: 100%|██████████| 4.20k/4.20k [00:00<00:00, 7.01MB/s] Traceback (most recent call last): File "/.../.venv/lib/python3.11/site-packages/evaluate/loading.py", line 265, in _download_additional_modules raise ImportError( ImportError: To be able to use evaluate-metric/accuracy, you need to install the following dependencies['scikit-learn'] using 'pip install sklearn' for instance'
代わりにpip install scikit-learnしましょう!
evaluateのリポジトリにissueがあがっていました。プルリクチャンス!
- 過去に数回取り上げています。一例 ↩