centos編譯python3繫結的pycaffe

2021-07-23 05:39:20 字數 4077 閱讀 4326

寫在開頭:目前python3版本的pycaffe仍然屬於不穩定版本,有很多未知因素,所以還是非常建議使用python2.7編譯pycaffe。

1.python3

centos預設不自帶python3,在此處安裝python3環節中強烈建議使用因為據google結果顯示,其他版本最後編譯pycaffe時無法正確匯入,會提示protobuf錯誤,詳情參考caffe的issue(和protobuf的issue(同時安裝miniconda3時注意請務必將lib資料夾路徑配置在ld_library_path環境變數或者~/.bash_profile中,加入/etc/ld.so.config可能導致開機無法啟動。

2.編譯opencv3.1.0

2.1 刪除cmake對python2版本的檢測(可選)

cmake/opencvdetectpython.cmake檔案的如下一段話:

find_python(2.7

"$" python2_library python2_include_dir

python2interp_found python2_executable python2_version_string

python2_version_major python2_version_minor python2libs_found

python2libs_version_string python2_libraries python2_library

python2_debug_libraries python2_library_debug python2_include_path

python2_include_dir python2_include_dir2 python2_packages_path

python2_numpy_include_dirs python2_numpy_version)

其實對本段的刪除並不是必須的,但是在我編譯時如果不刪除就不能正確的檢測到python3.5的相關資訊。

2.2 編譯

cmake -dwith_cuda

=off -dpython_executable

=/usr/local/miniconda3/bin/python -d python_library=/usr/local/miniconda3/lib/libpython3.5m.so -d python_numpy_include_dirs=/usr/local/miniconda3/lib/python3.5/site-packages/numpy/core/include -d python_include_dir=/usr/local/miniconda3/include/python3.5m -d build_tests=off -d cmake_build_type=release -d cmake_install_prefix=/usr/local

-d build_docs=off -dpython_packages_path

=/usr/lib/miniconda3/site-packages

.  make && sudo make install

注意點1:在執行cmake命令時一定要注意,python3一定要出現在opencv modules– to be built一欄中。並注意檢查python 3的interpreter,libraries,numpy等資訊。

注意點2:然後經過make之後就可以在lib資料夾下面發現python3資料夾,裡面有乙個可以被import的so檔案。如果make install不能將該so正確的放入到python3的site-package目錄中時就自行放入就好了。

3. 編譯boost-python3

之前在ubuntu編譯時都不需要這個步驟的,但是在centos上編譯到pycaffe最後一步時總是提示-lboost-python3.so不存在,而且沒有找到現成的rpm可以直接裝,就自己編吧,反正很快。

wget 

tar -jxvf boost_1_61_0.tar.bz2 && cd boost_1_61_0

./bootstrap.sh --

with

-python

=/usr/local/python3.5/bin/python3 --prefix=/usr/local/boost

./b2 stage threading=multi link

=shared

sudo ./b2 install threading=multi link

=shared

然後可以看到 libboost-python3.so出現在了/usr/local/boost/lib目錄,記得加到ld.so.conf中就ok了。

4.編譯protobuf

參照

cpu_only

:= 1

opencv_version

:= 3

blas

:= open #這裡我自己編譯的openblas,編譯特別簡單就不說了

blas_include

:= /usr/lib64/openblas/include

blas_lib

:= /usr/lib64/openblas/lib

#如果沒有之前編譯的boost庫,則最後會提示missing -lboost_python3

python_libraries

:= boost_python3 python3.5m

python_include

:= /usr/local

/miniconda3/include

/python3.5m \

/usr

/local/miniconda3/lib/python3.5/site-packages/numpy/core/include

python_lib

:= /usr/local

/miniconda3/lib

with_python_layer

:= 1

include_dirs

:= $(

python_include) /usr/local/include /usr/lib64/openblas/include

library_dirs

:= $(

python_lib) /usr/local/lib /usr/lib /usr/lib64/openblas/lib /usr/local/boost/lib /usr/local/lib

最後執行make all && make pycaffe 即可。

總結:

本篇文章寫於2023年9月29日,採用master分支最近release candidate 3**編譯完成,最後能成功import caffe.但是當使用predict函式時遇到以下問題未解決:

file "/usr/local/miniconda3/lib/python3.5/site-packages/caffe/classifier.py", line

89, in predict

out = self.forward_all(**)

file "/usr/local/miniconda3/lib/python3.5/site-packages/caffe/pycaffe.py", line

175, in _net_forward_all

for batch in self._batch(kwargs):

file "/usr/local/miniconda3/lib/python3.5/site-packages/caffe/pycaffe.py", line

259, in _net_batch

num = len(blobs.itervalues().next())

attributeerror: 'dict' object has no attribute 'itervalues'

因為dict的itervalues方法在python3中被移除,儘管caffe官方一直在努力保持python3的相容,但暫時不夠完美,期待完美相容python3的**。

CentOS編譯安裝Python3

最近想學一下一門新的高階語言,無意中看到用python仿aiphago的github專案,就決定是他了。aiphago的git傳送門 python官網 在系統選擇,也挑了乙個困難路線,裝在linux的系統,centos裡。也就不廢話了,下面正題。鍵入以下命令 yum install y openss...

centos編譯安裝python3

1.修改網絡卡配置檔案 vim etc sysconfig network script ifcfg eth0注 修改完之後,不要service network restart 重啟 reboot 2.開機後 ping www.baidu.com如果成功進行下一步,否則重複步驟1 5.上傳完之後 在...

CentOS編譯安裝Python3

最近想學一下一門新的高階語言,無意中看到用python仿aiphago的github專案,就決定是他了。aiphago的git傳送門 python官網 在系統選擇,也挑了乙個困難路線,裝在linux的系統,centos裡。也就不廢話了,下面正題。鍵入以下命令 yum install y openss...