Caffe をインストールしてて大いにハマった際の、トラブルシューティングメモ。
環境は Mac OS X 10.11 El Capitan です。
問題1: numpy のバージョン違いと El Capitan の System Integrity Protection
PyCaffe をビルドしたあと動作確認として
$ python
>>> import caffe
ってやると、
RuntimeError: module compiled against API version a but this version of numpy is 9
って怒られた。
そこでnumpy をアップデートしようと、
$ sudo pip install -U numpy
をしたら、パーミッションがどうのこうの、どうやら El Capitan の "System Integrity Protection" という新機能が邪魔をしてるらしい。
$ sudo pip install --upgrade numpy --ignore-installed six
ってやるとコマンドは通るが、古いnumpy(1.8.0rc1)がまたインストールされるだけ・・・
Collecting numpy Downloading numpy-1.10.2-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.7MB) (中略) Successfully installed numpy-1.8.0rc1 six-1.4.1
対処1: HomebrewでPythonをインストール & numpyアップデート
あれこれ試してうまくいかず困って、こちらの Mario さんの回答 を参考に(ベストアンサーの System Integrity Protection を無効にする方法は怖いのでやらなかった)Homebrew で Python をインストールして、
$ brew install python
その後もう一度
$ sudo pip install -U numpy
したら最新の 1.10.2 にアップデート成功。
$ sudo pip list numpy (1.10.2)
ただ `$ brew doctor` してその指示に従って `$ brew prune` したりもしたのでそちらが効いたのかもしれない。。
問題2: 古いnumpyが利用される
numpyのアップデートに成功したものの、まだ
>>> import numpy >>> print numpy.__version__ 1.8.0rc1
となる。(1.10.2 の方を見ていない)
パスを出力してみると、Mac標準の方が使用されている。
>>> import numpy >>> print numpy.__path__ ['/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy']
この記事 に書いてある方法だとMacに標準で入ってた方をリネームしているが、そういう操作は El Capitan だと怒られるので基本的にできない。
対処2: 環境変数のPATHを変更
python コマンドの場所を見てみる。
$ which python /usr/bin/python
PATH の優先度を変更するため、~/.bash_profile を編集
- 修正前
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin
- 修正後
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
反映
$ source ~/.bash_profile
確認
$ which python
/usr/local/bin/python
問題3: Segmentation fault: 11
このままmakeやらをやりなして動作確認しようとしたら、
>>> import caffe Segmentation fault: 11
でクラッシュ。
対処3: Makefile.config を修正
こちらのページ を見ていて思い出したが、Python の場所を変えたので Makefile.config のパスを修正してから諸々やりなおさないといけない。
- 修正前
PYTHON_INCLUDE := /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 \ /usr/local/lib/python2.7/site-packages/numpy/core/include/
- 修正後
PYTHON_INCLUDE := /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/include/python2.7 \ /usr/local/lib/python2.7/site-packages/numpy/core/include/
- 修正前
PYTHON_LIB := /usr/lib
- 修正後
PYTHON_LIB := /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib
問題4: ValueError: unknown locale: UTF-8
import caffe したら今度は
ValueError: unknown locale: UTF-8
ってのが出た
対処4: ビルドのやりなおし
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
$ source ~/.bash_profile
動作確認
インタプリタを起動して
>>> import caffe >>>
やっと成功・・・!
こういう苦労の果てに書いた記事がこちら: