前言:
网上有很多caff安装教程,但是坑也不少。推荐一篇不错的:http://www.jianshu.com/p/cc16e2977e27
刚开始是想编译matlab接口的,毕竟对matlab比较熟悉,但是一直报错,在网上也找不到任何有效的解决办法,逼于无奈转战python。
编译python也不是一帆风顺的,刚开始在makeFileConfig中配置各种路径,make时报错,网上找不到解决方法,所以改用cmake。(这个过程是非常痛苦的)
在此建议用cmake进行编译,会省去很多不必要的麻烦,而且配置简单。
进入正题...
本文主要是解决配置python接口中遇到的问题:
1、make pytest时报错
/bin/sh:
python2: command not found
make[3]:
*** [CMakeFiles/pytest] Error 127
make[2]:
*** [CMakeFiles/pytest.dir/all] Error 2
make[1]:
*** [CMakeFiles/pytest.dir/rule] Error 2
make:
*** [pytest] Error 2
错误原因:找不到python2命令,Python版本问题
解决方法:到/usr/bin中查看是否有python2文件,没有的话肯定提示命令找不到。cd到出问题文件的路径:build/CMakeFiles/putest.dir/build.make修改python2为你bin里面有的python版本(我的是python2.7),重新运行,问题解决。
2、解决问题1后运行pytest出现问题:ImportError: No module named skimage.io ImportError:No module named google.protobuf
解决方法:运行命令:sudo pip install protobuf(如果没有安装pip:sudo easy_install pip)
sudo pip scikit-image
那么问题来了,如果你是10.10之后的系统,就面临一个系统权限问题。
重启电脑,按住command + R进入恢复模式,选择左上角实用工具下的终端,输入csrutildisable回车,reboot,重启完美解决权限问题(csrutil enabl恢复SIP机制)
3、Exception: "dot" not found in path.
解决方法:brew installgraphviz(不能用pip安装)
pip uninstall pyparsing
pip install -Iv https://pypi.python.org/packages/source/p/pyparsing/pyparsing-1.5.7.tar.gz#md5=9be0fcdcc595199c646ab317c1d9a709
pip install pydot
4、'numpy/arrayobject.h' file not found
pip install numpy
如果你明明装了numpy,却报错,重新cmake..
5、运行make pytest时python崩溃
原因:mac自带python2.7.10版本bug,下载python2.7.13,然后重新跑。(注意不要卸载自带python,会出现很多问题,血的教训!还有,caffe不支持python3)跑程序时选择的环境是python2.7.13
安装2.7.13后,如果cmake时Python配置是这样的
libraries路径还是系统自带的Python2.7.10,则需要修改CMakeCache.txt
自己装的2.7.13在local下并没有include/python2.7和lib/libpython2.7.dylib,需要自己将2.7.13的相应文件链接到local下,命令为:
sudo ln -s /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 /usr/local/include/python2.7
sudo ln -s /Library/Frameworks/Python.framework/Versions/2.7/Python /usr/local/lib/libpython2.7.dylib
修改好CMakeCache.txt后重新make pytest,ok!
-------分割线--------
Tips:
1、自己装的python会装在/Library目录下,系统自带的在/System/Library下.
2、usr/bin下是系统预装的可执行程序,usr/local/bin是用户放置自己可执行程序的地方,如果两个目录有相同的可执行程序,谁先执行受环境变量的影响
这里/usr/local/bin会先执行。
如有问题欢迎留言讨论