【Mac/Python】homebrewでインストールしたPythonライブラリがpyenv環境で使えない時の対処法
chipwispererというツールをこのページを参考にインストールしようとしていて,homebrewでscipyを入れる手順があった.scipyのインストールには成功したが,Pythonでモジュールが見つからない.pyenv環境から上手いこと参照されてないのでは?と思ったらそうだったという内容です.
現象
Homebrewでscipyを入れた.正しくインストールは完了したのに,いざPythonで使ってみようとするとImportError: No module named scipy
みたいなことになる.
原因
Homebrewのインストール先にライブラリが置かれるのでpyenvのPythonから参照できないのが原因です.
Homebrewのインストール先
Homebrewで入れたPythonパッケージは,/usr/local/Cellar/
配下に入る.これをpyenvのPythonが参照できてない.
例えばscipyをインストールした場合は,
/usr/local/Cellar/scipy/1.0.0_2/lib/python2.7/site-packages/scipy
にPython2.7用のscipyが入っている.
pyenvのPythonはどこにある?(どうやってバージョン切り替えしている?)
pyenvをセットアップする時に意識するかもしれないが,pyenvは~/.pyenv
の中に~/.pyenv/versions/
というのを作って,さらにこの中に2.7.14
とか3.6.3
とかを作ってこれを切り替えている.
おそらくecho $PYENV_ROOT
とかで確認できる (私の場合はPYENV_ROOTを変更している.そうするのが普通?).
そして,Python 2.7.14のsite-packegesディレクトリは,
$PYENV_ROOT/versions/2.7.14/lib/python2.7/site-packages/
にある.
対処
いくつか対処法はありそうだが,ここではシンボリックリンクを貼る方法を紹介する.
以下のようにシンボリックリンクを貼ることで対処可能.
% ln -s /usr/local/Cellar/scipy/1.0.0_2/lib/python2.7/site-packages/scipy/ /usr/local/var/pyenv/versions/2.7.14/lib/python2.7/site-packages
感想
pipで入れられるなら極力pipで管理した方がシンボリックリンクとかpathの設定とかしなくて済むので良さそうな気がしますが,
今回はHomebrewでのインストールにおける対処を行いました.