是否可以从 virtualenv 运行 opencv(python 绑定)?

Posted

技术标签:

【中文标题】是否可以从 virtualenv 运行 opencv(python 绑定)?【英文标题】:Is it possible to run opencv (python binding) from a virtualenv? 【发布时间】:2012-03-24 10:39:52 【问题描述】:

我想将所有内容保留在 virtualenv 中。这对 OpenCV 可行吗?我可以从头开始构建,我只需要先设置 virtualenv 然后使用特殊的编译标志告诉它安装到哪里?

【问题讨论】:

你正在使用什么操作系统/字典? Ubuntu 11.10。我曾尝试使用 cmake INSTALL PREFIX,但似乎并不想实际安装到该本地目录。 我也使用 ubuntu 11.10。等我尝试在虚拟环境中安装它。 这是我使用的设置,安装几乎是微不足道的。目前没有详细信息,但绝对可行。 【参考方案1】:

来自opencv install guide:

默认情况下,OpenCV 构建系统将选择它可以找到的最新 Python 版本,或者您可以在调用 cmake 时使用 PYTHON_EXECUTABLE 变量强制它使用特定版本。)

我刚刚按照上面链接上的说明将它安装在我的 ubuntu 11.10 的虚拟环境 --with-no-site-package 上。 你需要构建整个opencv。和它的 python 包装器在一起。

编辑 1:

    创建一个临时目录,我们将其记为 ,您要在其中放置生成的 Makefile、项目文件以及目标文件和输出二进制文件。

    cd ~/opencv
    mkdir release
    cd release
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
    

    进入创建的临时目录(),继续:

    make
    sudo make install
    

---------

构建和安装后,在 PYTHON_PATH 上添加扩展模块

export PYTHONPATH=~/projects/opencv/release/lib:$PYTHONPATH

【讨论】:

我已按照您提到的相同步骤进行操作。在“sudo make install”之后,我收到一条消息说它安装成功。但是,当我在 python 中导入 opencv2 时,出现导入错误。知道我应该怎么做吗? 确保您的 PYTHONPATH 指向本文中提到的 opencv 我确实将它添加到我的 .bash_profile 中。当我在我的 virtualenv 中执行“pip freeze”时,我看不到 opencv。我觉得这很奇怪 我遵循了这个,但是,当我在 virtualenv 上被激活时,我做到了。成功了!【参考方案2】:

我发现解决方案是我必须将 cv2.so 和 cv.py 复制到运行 virtualenv 的目录中,然后 pip install numpy。在我使用的 Ubuntu 12.04 上执行此操作。

virtualenv virtopencv
cd virtopencv
cp /usr/local/lib/python2.7/dist-packages/cv* ./lib/python2.7/site-packages/
./bin/pip install numpy
source bin/activate
python
import cv

【讨论】:

但这并不能真正帮助您进行自动部署,对吧?因为您仍然需要为您的特定系统提供正确的 .so 文件。 这是真的,我发现您也可以对 .so 文件进行符号链接,因此只要符号链接位于同一位置,无论您使用的是什么 OpenCV 版本,它基本上都可以正常工作。不利的一面是,即使使用 --relocatable 标志,virtualenv 似乎也不能重定位到另一台机器,所以它真的只在我想使用不同的 python 库而不是安装在系统。 最干净的方式,无需复制或硬链接任何内容:***.com/a/24112175/562816 对我不起作用,总是在import cv2 上获得RuntimeError: _ARRAY_API is not PyCObject object[...] ImportError: numpy.core.multiarray failed to import。是的,numpy 已安装。 我知道这有点旧,但我使用sudo apt-get install python-opencv 来安装包。显然,cv2.so 和 cv.py 位于 /usr/lib/python2.7/dist-packages/ 下。让你们知道(Ubuntu 15.04 LTS)【参考方案3】:

在 Debian 上,我安装了 python-opencv、python-virtualenv、python-pip,然后使用选项 --system-site-packages 创建了一个 virtualenv。

【讨论】:

工作就像一个魅力【参考方案4】:

这可以通过将 python 可执行文件作为参数传递给 cmake 来实现。我还建议使用本地安装文件夹,因此您根本不需要 sudo。然后,如果 make install 不要求您提供 sudo 权限,它可能是针对您的 virtualenv python 。

使用 cmake-gui 打开 cmakelists.txt 以查看 python 变量。如果你的 virtualenv 中没有 numpy,它也可能会出错,这样你就知道它选择了正确的 python。这也适用于独立于 python 版本,因为它是专门为你的 python 可执行文件构建的

【讨论】:

以上是关于是否可以从 virtualenv 运行 opencv(python 绑定)?的主要内容,如果未能解决你的问题,请参考以下文章

在virtualenv中使用不同的Python版本

使用特定的 virtualenv 在 Jupyter notebook 中执行 Python 脚本

在vim中设置python virtualenv

如何从 virtualenv 中的 python 脚本运行 Tensorboard?

如何将模块从一个 virtualenv 复制到另一个

从 django 应用程序调用 unoconv 的问题,在 virtualenv 中运行