その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

Caffe(PyCaffe)のインストールでハマったメモ

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: ビルドのやりなおし

http://stackoverflow.com/questions/19961239/pelican-3-3-pelican-quickstart-error-valueerror-unknown-locale-utf-8:こちらの回答 の通りに

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
$ source ~/.bash_profile 

動作確認

インタプリタを起動して

>>> import caffe
>>> 

やっと成功・・・!



こういう苦労の果てに書いた記事がこちら: