ubuntu16.04 在caffe中安装python3时踩到的坑

在caffe中安装python3.5的原因:

开始之前一定要提醒大家,不要安装python3.6,目前caffe的官方给的说明是,还不能很好的支持python3.6

刚开始那会,笔者在安装caffe之前就已经装过anaconda3了,但是熟悉anaconda3的童鞋都知道,anaconda3默认安装的是python3.6的版本,导致我在编译caffe时,具体编译指令如下:

可以参考我的另一篇博客:Ubuntu 16.04 在cuda9.0 cudNN7.5 opencv3.4.0下安装 caffe(详细):博客地址

cd ..\\回到caffe文件夹的位置
 
make all -j12 //j12代表计算机cpu有12个核,这个得根据自己的电脑配置,我这里可以12线程一起make,这样make速度会快上很多
 
make test -j12
 
sudo make runtest -j12
//这里直接 make runtest -j12 可能如下报错
check failed : status == cublas_status_success(1 vs 0) cublas_status_not_initialized
 
make pycaffe //如果以后用python来开发的话必须执行这一句,一般不管你是否用python,都会执行这一句

在进行make pycaffe后,检测pycaffe是否安装好,使用指令:

python

//进入python,会提示你安装的是在anaconda3的版本

import caffe

 在导入caffe模型时,就会报错:

Caffe中ImportError: dynamic module does not define module export function (PyInit__caffe)错误

主要原因:就是caffe对python3的支持并不好,只支持python2.7,此时你可以去anaconda官方下载anaconda2,使用2来进行对caffe模型的使用。

注意:

这里在使用anaconda2来编译caffe时,你的opencv版本不能是opencv3的,否则会报错:大量的opencv未定义的引用。

考虑到python3是未来的趋势,建议大家安装anaconda3.

安装过程中踩过的坑:

针对上面的问题:Caffe中ImportError: dynamic module does not define module export function (PyInit__caffe)错误

首先:

先对自己电脑中的anaconda3中的python3.6进行降级,下载python3.5,官网链接:python3.6换成3.5

没有anaconda3的可以在这里下载:anaconda3下载,具体安装很简单,可以自行百度。

其次:

安装好python3.5,你按照上面要求重新编译caffe,并导入caffe模型时,依然报错,可以通过更改caffe目录下的makefile.config文件:

# Uncomment to use Python 3 (default is Python 2)
#PYTHON_LIBRARIES := boost_python3 python3.5m
#PYTHON_INCLUDE := /usr/include/python3.5m \
#                /usr/lib/python3.5/dist-packages/numpy/core/include

将上面的语句后三行的#号注释掉,如下:
# Uncomment to use Python 3 (default is Python 2)
PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
                /usr/lib/python3.5/dist-packages/numpy/core/include

注释完再重新

make clean
make all -j12 //12是我服务器的核数,具体根据自己电脑配置
make pycaffe

这时又有一个坑等着我们,遇到了这个错误:提示 缺少libboost,很头疼,解决办法:

出现问题“ld cannot find lboost_python3”,这个时候应该创建一个libboost_python-py35.so的符号链接。 

具体做法为“cannot find -lboost_python3” when using Python3 Ubuntu16.04

cd /usr/lib/x86_64-linux-gnu
sudo ln -s libboost_python-py35.so libboost_python3.so

如果没有boost这时就需要自己去安装一个:

sudo apt-get install libboost-all-dev
//头文件一般安装在
/usr/include
//下面有一个目录boost,里面是头文件。而库文件一般都放在
/usr/lib/x86_64-linux-gnu

//如何查看当前安装的boost版本
dpkg -S /usr/include/boost/version.hpp

//通过上面的命令,你就可以发现boost的版本了,查看结果可能如下:
libboost1.58-dev: /usr/include/boost/version.hpp

到这里,在重新编译caffe:

make clean
make all -j12 //12是我服务器的核数,具体根据自己电脑配置
make pycaffe

输入python,再import caffe,报错!!!

ImportError: No module named 'google'
//或者报如下错误:
ImportError: No module named google.protobuf.

这里就必须再安装protobuf:

手动编译和安装 protobuf 3.0 以上版本,到 protobuf 的 release页面去下载两个安装包:github地址

由于是python3.5 必须下载protobuf-cpp-3.5.1.zipprotobuf-python-3.5.1.zip,刚开始下载最新版本的3.6.0,在安装protobuf-python-3.6.0时会报错。

 

注意,仔细看 protobuf 的说明。安装 protobuf 需要安装两样东西, 少一样都不行:

  • the protocol compiler;
  • the protobuf runtime 

因此, 接下来首先安装 the protocol compiler 和 protobuf cpp runtime

注意:必须先安装完 protobuf-cpp-3.5.1.zip,在安装protobuf-python-3.5.1.zip,否则还是会报错。

解压第一个安装包 `protobuf-cpp-3.0.0-beta-2.zip`,并进入解压出来的目录
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.

这样 the protocol compiler 和 protobuf cpp runtime 就同时编译和安装好了。下面编译和安装 protobuf python runtime:

解压第二个安装包 `protobuf-python-3.0.0-beta-2.zip`,并进入解压出来的目录
$ cd python
$ python setup.py build
$ python setup.py test
$ python setup.py install

这样 protobuf python runtime 就编译和安装好了。注意 protobuf python runtime 是作为 pip 的包安装的。但是你可以从 conda 里面看到它:

$ conda list | grep protobuf
protobuf                  3.0.0b2                   <pip>

最后:

在重新编译caffe,再在python中导入:import caffe就能成功了。

参考博客:https://blog.csdn.net/Dark_Miro/article/details/78355292?locationNum=9&fps=1

                  https://blog.csdn.net/lien0906/article/details/51784191

https://stackoverflow.com/questions/34295136/importerror-dynamic-module-does-not-define-module-export-function-pyinit-caff

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值