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

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(详细):博客地址


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

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


   
   
   
   
  1. python
  2. //进入python,会提示你安装的是在anaconda3的版本
  3. 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文件:


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

注释完再重新


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

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

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

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


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

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


   
   
   
   
  1. sudo apt-get install libboost-all-dev
  2. //头文件一般安装在
  3. /usr/ include
  4. //下面有一个目录boost,里面是头文件。而库文件一般都放在
  5. /usr/lib/x86_64-linux-gnu
  6. //如何查看当前安装的boost版本
  7. dpkg -S /usr/ include/boost/version.hpp
  8. //通过上面的命令,你就可以发现boost的版本了,查看结果可能如下:
  9. libboost1 .58-dev: /usr/ include/boost/version.hpp

到这里,在重新编译caffe:


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

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


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

这里就必须再安装protobuf:

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

由于是python3.5 必须下载protobuf-cpp-3.5.1.zip和protobuf-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,否则还是会报错。


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

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


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

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


   
   
   
   
  1. $ conda list | grep protobuf
  2. protobuf 3.0 .0b2

最后:

在重新编译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

你可能感兴趣的:(ubuntu16.04 在caffe中安装python3时踩到的坑,python2 python3,import caffe)