virtualenv中的两个版本的OpenCV,python

时间:2017-03-06 07:38:08

标签: python opencv virtualenv virtualenvwrapper

就我而言,我没有找到如何实现我想要的一步一步的教程。

我想为我的项目配置两个配置:带有opencv2.4的python2和带有opencv3.1的python3。为此我克隆了opencv,并根据here的教程创建了一个virtualenv(只是没有覆盆子PI和CUDA,但在配置期间它只是一个标志)。

Q1:当我为python3创建另一个virtualenv时,我应该如何有效地管理opencv的安装?我可以以某种方式链接到各种构建文件夹吗?

删除相同的构建文件夹,检查具有相应版本的opencv分支,并在每次切换virtualenv时从头开始构建它似乎是次优解决方案。

(假设,opencv被克隆到/home/libraries/opencv/

Q2:本教程在第1节中介绍了opencv和python的各种依赖项的安装。这是在创建virtualenv之前。我可以同时安装例如python-dev和python-dev3,还是应该覆盖virtualenv中的内容?

Q3: 我设法在每个virtualenv中正确安装和符号链接两个opencv版本和各自的python版本。但是我不完全理解cmake输出:

执行cmake(在virtualenv中默认使用python2.7; opencv git checkout 2.4.13和opencv_contrib在master中,因为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

在尝试使用virtualenv和python3.4(git checkout 3.1.0)时,cmake现在似乎认识到两个python版本,但似乎选择了错误的2.7(但我以某种方式成功构建了所需的3.4)。为什么在virtualenv和python2.7中找不到python3.4,加上为什么选择错误的python进行构建?:

--   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,那么不能简单地对构建的库进行符号链接。)

2 个答案:

答案 0 :(得分: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:你在virtualenv中安装numpy并创建一个cv2.so链接,以支持此环境的python版本。

答案 1 :(得分: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,只是它的用户。