nikkie-ftnextの日記

イベントレポートや読書メモを発信

pip install sklearn してはいけません。代わりに pip install scikit-learn しましょう

PyPIのsklearnパッケージのお言葉です。

use pip install scikit-learn rather than pip 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とする可能性がある
  • もし仮にPyPIのsklearnとして悪意あるパッケージが置かれたならば、pip install sklearnしたばかりに被害を被ってしまう
    • そうならないようにscikit-learn開発者がPyPIのsklearnも登録している
  • sklearnはpip install sklearnでscikit-learnがインストールできるように置かれた
    • 2022年以降ではPyPIのsklearnがdeprecated(代わりにpip install scikit-learn

インストールで指定するライブラリの名前と、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があがっていました。プルリクチャンス!


  1. 過去に数回取り上げています。一例