2021-05-12 14:32:11
Linux下安裝Python3.5及其OpenCV3.2介面
電腦裡有:Python2.7.5、python3.5.0(後來下載安裝的,當下載安裝這個版本後,發現輸出python -V命令出來的只會是3.5.0l了)、opencv3.2.0、numpy1.9.0(我自己手動下載安裝的)。看了網上的很多教學,試了很多遍,弄完以後仍舊沒有cv2.so!找了很久原因,看到別人說:
才恍然大悟,原來在cmake時,不管是用python2還是python3,那下面的幾欄都得有路徑,不然無效!!!!!!!!!!當然中間有個含PYTHON_NUMPY字樣的那欄也要填上numpy的路徑!
於是我再一次編譯安裝opencv3.2時候出現:
雖然是個報錯,但這裡出現了cv2字樣以及opencv_python3字樣!!!!!!!!!於是我想是不是我自己手動下載的這個numpy的版本不對?!於是我試著yum install numpy,但yum命令用不了會報錯,因為yum不支援python3以上的版本!所以我只能將python命令預設到python2.7.5版本而不是python3.5:
然後我再yum install numpy。找到numpy安裝在哪裡(我的去了usr/lib64/python2.7/site-packages/下面)。然後再看這個numpy的core/include/numpy下有沒有_numpyconfig.h(注意不是_numpyconfig.h.in)檔案。我找了下,有。也就是說我之前手動下載的numpy裡沒有找到_numpyconfig.h檔案而這裡有。於是我把這個_numpyconfig.h複製到我的numpy1.9.0的/numpy/core/include/numpy/下面。(因為我之前cmake時PYTHON_NUMPY_INCLUDE的路徑我寫的就是numpy1.9.0/numpy/core/include)
接著之前報錯的地方繼續安裝,出現:
看之前的_numpyconfig.h的那個錯不報了,解決了。往下編譯安裝時出現_multiarray_api.h這個錯。於是我去我的numpy1.9下面找,果然沒有這個檔案而在/usr/lib64/python2.7/site-packages/numpy/core/include/numpy下又找到了這個檔案。有兩種辦法:1、按照我之前的解決辦法,複製過去,重新編譯安裝,出現什麼錯再解決。2、或者直接從cmake那裡重新編譯OpenCV,重新填寫PYTHON_NUMPY的路徑!改成什麼檔案都不缺的/usr/lib64/python2.7/site-packages/numpy/core/include/numpy。我選擇了辦法2:
PYTHON2_***和PYTHON3_***後的都都要填上路徑,盡量補全!!!我除了PYTHON2_INCLUDE_DIR2 PYTHON_LIBRARY_DEBUG PYTHON3_INCLUDE_DIR2 PYTHON3_LIBRARY_DEBUG 這4項沒有寫路徑其它都寫了並核對了。仔細看我這裡的PYTHON2_NUMPY_INCLUDE_DIRS與PYTHON3_NUMPY_INCLUDE_DIRS的路徑,這不是我自己下載的numpy1.9資料夾路徑,因為這裡面缺少上次報錯的一些檔案!而現在填上的路徑裡是不缺這些檔案的:
然後configure,接著configure,接著generate即可。
然後去剛剛編譯好的資料夾下面,make :
看終於出來cv2字樣了,感覺離成功不遠了。
繼續make install。然後我的即可在剛剛編譯的資料夾下找到這個cv2的字樣:
這時候通過在整個計算機中查詢,我發現/usr/local/lib/python3.5/site-packages下也有這個cv2.cpython-35m-x86_64-linux-gnu.so檔案。於是我進入這個目錄後:ln -s cv2.cpython-35m-x86_64-linux-gnu.so cv2.so 將那個檔案軟連結到cv2.so!這樣就可以了。(在make install之後我沒找到cv2.so檔案差點崩潰放棄,還好我沒放棄,終於等到你哈哈哈)
看可以了:
看我的這個opencv的python介面只能在python3.5下使用!不過還有個小小的問題就是numpy.core.multiarray failed to import!這個只要不用到就沒事,總體import cv2成功!
我查了下numpy.core.multiarray failed to import 這個錯誤是因為版本不對,我cmake裡無論是python3.5還是python2.7用的都是/usr/lib64/python2.7/site-packages/numpy/core/include/numpy!這是不對的!版本不對問題。(你們看之前cmake時的PYTHON2_NUMPY和PYTHON3_NUMPY的路徑都是2.7下的那個numpy,而那個numpy其實是1.7版本的,所以這個numpy資料夾只適合python2.7,所以安裝完畢時它自動跑去了python2.7的site-packages下面,而python3.5下面就沒有!!!!!所以這是不對的!!!!python2.7和python3.5用的都是python2.7的numpy,而我現在是搞Python3.5+OpenCV3.2)我看了網上說python3.5.0的需要numpy1.11.1!一個辦法是下載安裝numpy1.11.1後重新返回cmake那裡寫正確的PYTHON_NUMPY路徑!或者另一個辦法,下載安裝新的合適的numpy1.11.1後移入python3.5下面(不知道行不,試試。即我想在不cmake的前提下搞正確就必須待會兒安裝好numpy1.11.1後要將numpy1.11.1下的資料夾numpy複製進我之前cmake時指定的PYTHON3_NUMPY的路徑中。。。。其實這裡心裡清楚python2.7和python3.5用的都是Python3.5的numpy,不過我想此時應該不會錯。因為我現在弄的Python3.5+OpenCV3.2,只不過是去python2.7的資料夾下讀取自己的python3.5的numpy。。。有點繞哦,其實就是爸爸B和媽媽A要找自己的兒子,之前AB將自己的兒子numpy寄養在家庭C中,鄰居D也有一個兒子叫numpy。AB非常需要自己的兒子,結果卻去D中將numpy接回家(也就是我開始錯誤的原因),後來知道自己搞錯了,於是去C中將自己的兒子接回來(正確))。
我暫時先用方法2,自己去官網下載了一個num1.11.1,然後python3 setup.py install ,結果:
看這裡一會兒有2.7,一會兒有3.5,我想應該是命令衝突,於是我去usr/lib/下將python2.7資料夾刪掉,然後將python3.5的資料夾複製進來。再執行python3 setup.py install 就不報錯了。numpy1.11.1成功安裝。numpy1.11.1下出現numpy這個資料夾,將這個資料夾複製到之前cmake時自己指定的目錄下。
然後:
看吧 驗證了我所想,搞出來了。正確!!!!!!!!!!!!!!!!!!!!!!!!!!!!
即現在電腦裡有2個版本:2.7的沒有opencv介面,3.5的有opencv3.2介面:
總結:
1、電腦裡有多個版本的python沒關係的,但python命令關聯到哪個版本關係到能否使用yum等命令!最好還是python命令關聯的是2.7版本,python3命令關聯的是3.5版本,以防止混亂。
2、不一定要事先下載numpy檔案,先檢查電腦裡的python的目錄下有沒有numpy資料夾,檢查numpy資料夾中是否有_numpyconfig.h檔案,如果有,這一步就省略;否則手動下一個全面的numpy。
3、cmake時一定要注意填寫PYTHON_***相關的目錄,盡量都填完並且核對。特別是PYTHON_NUMPY,一定要注意PYTHON2和PYTHON3的版本擁有不同的numpy!
4、在make install之後出來的是cv2.cpython-35m-x86_64-linux-gnu.so而不是cv2.so,不要驚慌,軟連結一下就好。
其實就是第3步最最重要!這一步正確,後面就不用像我這樣麻煩了。當然盡量不要多版本搞在一個電腦中。
有一個感想:問題是不會無緣無故爆出來的,必定有其對應原因,學會聯絡錯誤提示,找到可能的解決辦法,辦法往往不止一種。
精簡步驟如下:
1、安裝你想安裝的python版本,系統自帶的python2.7,我自己又下了python3.5並安裝;
2、下載每個python版本對應的numpy(注意是對應的,不能搞錯版本)並安裝(也許某個版本會安裝不上,這個就要自己想辦法解決,就像我上面那樣),放在每個python的site-packages下;
3、下載你想下載的opencv版本並解壓;
4、在cmake下進行opencv編譯,注意所有的PYTHON_***後面的路徑自己盡量補全,而且每個版本的PYTHON_NUMPY路徑一定要核對正確。configure--configure--generate
5、輸入相應的指令,如python或python3進入python環境,import cv2 看是否報錯。如果安裝正確,是不會報任何錯的!
然而,還有一個更簡單的方法,即用Anaconda3-4.2.0來裝python3.5和opencv3.4,這樣更方便:
1、下載Anaconda3-4.2.0-Linux-x86_64.sh並預設安裝
2、pip install opencv-contrib-python 如果time out 就直接去https://pypi.python.org/pypi/opencv-contrib-python/3.4.0.12 下載對應版本。如果想要3.2的直接在https://pypi.python.org/pypi/opencv-contrib-python/3.2.0.8下載對應版本
3、import cv2即可。 有什麼問題可以參考 https://pypi.python.org/pypi/opencv-contrib-python/3.2.0.8
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-08/153586.htm
相關文章