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でのインストールにおける対処を行いました.