はじめに
機械学習ライブラリのPyCaretをM1 Mac (Apple Silicon)にインストールする際に、情報が少なかったのでまとめました。
環境
最終的に以下の環境になります
- マシン: MacBook Pro (13-inch, M1, 2020)
- OS: macOS Big Sur 11.3
- 仮想環境 miniforge (conda 4.11.0)
- Python 3.8.12
- pycaret 2.3.5
インストール
失敗する方法
公式ドキュメントには以下のようにしてインストールするようにと書かれています(ここではcondaの仮想環境名をpycaret-envとしています)。
# create a conda environment
conda create --name pycaret-env python=3.8
# activate conda environment
conda activate pycaret-env
# install pycaret
pip install pycaret
# create notebook kernel connected with the conda environment
python -m ipykernel install --user --name pycaret-env --display-name "pycaret-env"
しかし、pip install pycaret
をすると以下のようなエラーが出ます
Collecting scikit-learn==0.23.2
Using cached scikit-learn-0.23.2.tar.gz (7.2 MB)
Installing build dependencies ... error
ERROR: Command errored out with exit status 1:
command: /Users/ytakano/miniforge3/envs/test/bin/python3.8 /private/var/folders/3r/t5k1t9rs7m188tfbtqw2pz380000gn/T/pip-standalone-pip-0285fuc9/__env_pip__.zip/pip install --ignore-installed --no-user --prefix /private/var/folders/3r/t5k1t9rs7m188tfbtqw2pz380000gn/T/pip-build-env-7l2fo1us/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel 'Cython>=0.28.5' 'numpy==1.13.3; python_version=='"'"'3.6'"'"' and platform_system!='"'"'AIX'"'"' and platform_python_implementation == '"'"'CPython'"'"'' 'numpy==1.14.0; python_version=='"'"'3.6'"'"' and platform_system!='"'"'AIX'"'"' and platform_python_implementation != '"'"'CPython'"'"'' 'numpy==1.14.5; python_version=='"'"'3.7'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.17.3; python_version>='"'"'3.8'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.16.0; python_version=='"'"'3.6'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy==1.16.0; python_version=='"'"'3.7'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy==1.17.3; python_version>='"'"'3.8'"'"' and platform_system=='"'"'AIX'"'"'' 'scipy>=0.19.1'
cwd: None
Complete output (3607 lines):
Ignoring numpy: markers 'python_version == "3.6" and platform_system != "AIX" and platform_python_implementation == "CPython"' don't match your environment
Ignoring numpy: markers 'python_version == "3.6" and platform_system != "AIX" and platform_python_implementation != "CPython"' don't match your environment
Ignoring numpy: markers 'python_version == "3.7" and platform_system != "AIX"' don't match your environment
Ignoring numpy: markers 'python_version == "3.6" and platform_system == "AIX"' don't match your environment
Ignoring numpy: markers 'python_version == "3.7" and platform_system == "AIX"' don't match your environment
Ignoring numpy: markers 'python_version >= "3.8" and platform_system == "AIX"' don't match your environment
Collecting setuptools
Using cached setuptools-59.5.0-py3-none-any.whl (952 kB)
Collecting wheel
Using cached wheel-0.37.0-py2.py3-none-any.whl (35 kB)
Collecting Cython>=0.28.5
Using cached Cython-0.29.25-py2.py3-none-any.whl (983 kB)
Collecting numpy==1.17.3
Using cached numpy-1.17.3.zip (6.4 MB)
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'done'
Collecting scipy>=0.19.1
Using cached scipy-1.7.3-cp38-cp38-macosx_11_0_arm64.whl
Building wheels for collected packages: numpy
Building wheel for numpy (setup.py): started
Building wheel for numpy (setup.py): finished with status 'error'
ERROR: Command errored out with exit status 1:
command: /Users/ytakano/miniforge3/envs/test/bin/python3.8 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/3r/t5k1t9rs7m188tfbtqw2pz380000gn/T/pip-install-cayqvtc4/numpy_ae51a51f472f4716b4319e0e34fc9477/setup.py'"'"'; __file__='"'"'/private/var/folders/3r/t5k1t9rs7m188tfbtqw2pz380000gn/T/pip-install-cayqvtc4/numpy_ae51a51f472f4716b4319e0e34fc9477/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/3r/t5k1t9rs7m188tfbtqw2pz380000gn/T/pip-wheel-fbwxlhbe
cwd: /private/var/folders/3r/t5k1t9rs7m188tfbtqw2pz380000gn/T/pip-install-cayqvtc4/numpy_ae51a51f472f4716b4319e0e34fc9477/
Complete output (3261 lines):
Running from numpy source directory.
(略)
成功する方法
こちらの記事によるとPyCaretがM1で動作しないscipyのバージョンを要求するためにインストールができないとのことです。こちらの記事を参考に、インストールをする方法を説明します。
はじめにPython 3.8の仮想環境を構築する部分は同じです。
# create a conda environment
conda create --name pycaret-env python=3.8
# activate conda environment
conda activate pycaret-env
まず、pipを使って、依存するパッケージをインストールせず、pycaretのみをインストールします。
pip install --no-dependencies pycaret
次に必要なパッケージをcondaを使ってインストールします。要求するパッケージ一覧は以下にあります。
これを元に次のようなファイルを作成します。
pandas
"scipy<=1.5.4"
numpy==1.19.5
seaborn
matplotlib
IPython
joblib
scikit-learn==0.23.2
ipywidgets
yellowbrick
lightgbm
plotly
wordcloud
textblob
cufflinks
umap-learn
pyLDAvis
"gensim<4.0.0"
"spacy<2.4.0"
nltk
mlxtend
pyod
pandas-profiling
kmodes
mlflow
imbalanced-learn==0.7.0
scikit-plot
Boruta
"pyyaml<6.0.0"
元のrequirements.txtから修正するポイントは以下の通りです。
-
>=
で指定されるバージョン指定を削除 -
<
でバージョン指定するものは、condaの引数に渡すときの都合上、ダブルクォーテーションで囲む
このファイルを読み込んで、必要なパッケージをcondaでインストールします。
cat pycaret_requirements.txt | xargs -n 1 conda install -c conda-forge
最後に、作成した環境(pycaret-env)と接続したノートブックカーネルを作成しておきます。
# create notebook kernel connected with the conda environment
python -m ipykernel install --user --name pycaret-env --display-name "pycaret-env"
おわりに
インストールした環境で、pycaret.classification
を使った簡単な動作確認は行いました。しかし全ての動作を確認できているわけではない点はご了承ください。
また参考にしたページに書かれている、XGBoostのインストールについては試していません。