2017-03-06 72 views
1

盡我所能,我沒有找到一個如何實現我想要的一步一步的教程。在virtualenv中的兩個版本的OpenCV,python

我想我的項目有兩種配置:python2 opencv2.4和python3 opencv3.1。爲此,我克隆了opencv並創建了一個遵循here教程的virtualenv(只是沒有樹莓派和CUDA,但在配置期間它只是一個標誌)。

Q1:當我爲python3創建另一個virtualenv時,應該如何有效地管理opencv的安裝?我能以某種方式鏈接到各種構建文件夾嗎?

刪除相同的生成文件夾,檢出一個opencv分支與各自的版本,並從頭開始構建它,當我切換virtualenv似乎是次優解決方案。

(假設,OpenCV的克隆到/home/libraries/opencv/

Q2:該教程描述在部分1中安裝各種依賴關係的OpenCV和python的。它在創建virtualenv之前。我是否仍然可以同時安裝例如python-dev和python-dev3,還是應該在virtualenv中覆蓋事物?


Q3: 我設法安裝和符號鏈接都正確OpenCV的版本,在每個virtualenv中的各自的Python版本。不過,我不完全理解cmake的輸出:

在執行cmake(在默認情況下使用python2.7的virtualenv; OpenCV的git checkout 2.4.13和opencv_contrib在主因爲有沒有對opencv2.4),它需要python2.7作爲翻譯。但是包路徑似乎不使用的virtualenv,這是爲什麼,爲什麼它仍然有效?:

-- Python: 
--  Interpreter:     /home/josh/.virtualenvs/tfpy2/bin/python2 (ver 2.7.6) 
--  Libraries:     /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6) 
--  numpy:      /home/josh/.virtualenvs/tfpy2/local/lib/python2.7/site-packages/numpy/core/include (ver 1.12.0) 
--  packages path:    lib/python2.7/site-packages 

雖然試圖與python3.4(git checkout 3.1.0)使用的virtualenv,cmake的,現在似乎認識到兩個Python版本,但是似乎選擇錯誤的一個2.7(但我以某種方式成功與所需的3.4)。爲什麼它找到的virtualenv和python2.7內python3.4沒有,加上爲什麼選擇了錯誤的蟒蛇爲構建?:

-- Python 2: 
--  Interpreter:     /usr/bin/python2.7 (ver 2.7.6) 
--  Libraries:     /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6) 
--  numpy:      /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.11.3) 
--  packages path:    lib/python2.7/dist-packages 
-- 
-- Python 3: 
--  Interpreter:     /home/josh/.virtualenvs/tfpy3/bin/python3.4 (ver 3.4.3) 
--  Libraries:     /usr/lib/x86_64-linux-gnu/libpython3.4m.so (ver 3.4.3) 
--  numpy:      /home/josh/.virtualenvs/tfpy3/lib/python3.4/site-packages/numpy/core/include (ver 1.12.0) 
--  packages path:    lib/python3.4/site-packages 
-- 
-- Python (for build):   /usr/bin/python2.7 

(我知道here是一些解決方案,但不是主要的想法virtualenv自動避免這樣的問題?另外,它似乎與here類似的問題,但由我如果錯誤版本的Python被識別/用於編譯,所以不能簡單地符號鏈接建庫。)

回答

1

A1:你可能會重複使用OpenCV源代碼如下。首先,構建OpenCV 2.4,與您引用的方式類似,但對於opencv和opencv_contrib,您的做法都是git checkout 2.4.13而不是3.1.0。

一旦你建立和安裝(使用make install)2.4版本,然後刪除生成文件夾,做git checkout 3.1.0,配置生成,所以它使用Python 3.構建和再次安裝。在這一點上,你應該有兩個OpenCV版本構建並安裝在你的計算機上。

A2:virtualenv是關於圖書館的python模塊或python綁定的。請注意,教程如何使用virtualenv:您將numpy安裝在virtualenv中,並創建一個鏈接到cv2.so,以構建此環境的python版本。

+0

謝謝!我很高興看到您的解決方案!同時我遇到了一個問題,我在主要問題中進行了更新,以保持崗位清潔。你能看看並更新你的答案嗎? – beginh

+0

另外,讓我只是保證,我知道什麼在引擎蓋下運行。基本上所有的依賴關係都需要OpenCV來構建cv2.so庫。根據我所使用的virtualenv,將安裝複製,然後將.so文件複製到python2.7和python3.4的站點包中。所以我可以自由刪除克隆的存儲庫,是嗎? 我不明白的是爲什麼numpy安裝在virtualenv中,而不是之前?如果我使用virtualenv安裝了numpy和/或OpenCV,會被覆蓋嗎? – beginh

0

您可能會考慮使用Anaconda進行Python開發。它的Miniconda適用於像Raspberry Pi這樣的物聯網設備。

Anaconda確實通過其conda-env軟件包和配置支持虛擬環境。通過conda-env,您可以運行多個副本和Python版本。通過conda install安裝OpenCV,一旦註冊,它將從其Anaconda cloud軟件包存儲庫下載Python包。這將減少下載,軟件包依賴和安裝方面的諸多麻煩。對於Anaconda Cloud中不可用的軟件包,可以將任何pip install支持的Python軟件包安裝到Anaconda。有一個學習曲線,但不難拾取。

希望得到這個幫助。

聲明:我不是Anaconda,只是它的一個用戶。

+0

非常感謝!然而,通過這篇文章,我不僅在尋找一個快速解決方案,而是瞭解發生了什麼。 – beginh

相關問題