能否在虚拟环境中运行OpenCV(Python绑定)?

32

我希望所有东西都能保留在virtualenv中。对于OpenCV是否可以实现这一点,我并不清楚。如果需要从头开始构建,我是否只需先设置virtualenv,然后使用特殊的编译标志来指示安装位置即可?


你使用的是什么操作系统/发行版? - pylover
Ubuntu 11.10。我尝试使用cmake INSTALL PREFIX,但似乎不想实际安装到该本地目录。 - xamox
我也使用Ubuntu 11.10。等我尝试在虚拟环境中安装它。 - pylover
这是我使用的设置,安装几乎是微不足道的。现在没有详细信息,但肯定是可行的。 - Yuval Adam
4个回答

43

我发现解决方法是我需要将cv2.so和cv.py复制到运行虚拟环境的目录下,然后使用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

2
但这并不能真正帮助您进行自动部署,对吧?因为您仍然需要针对特定系统拥有正确的.so文件。 - arno_v
1
这是真的,我发现你也可以将 .so 文件建立符号链接,只要符号链接位于相同位置,无论使用哪个 OpenCV 版本,都可以正常工作。缺点是虚拟环境似乎无法通过 --relocatable 标志重定位到另一台机器,因此它在我想使用不同的 Python 库而系统已安装库时才真正有用。 - xamox
最干净的方法,无需复制或硬链接任何东西: https://dev59.com/D2gu5IYBdhLWcg3wpYcj#24112175 - Dominique PERETTI
在我的电脑上无法工作,总是在“import cv2”时出现“RuntimeError:_ARRAY_API不是PyCObject对象[...] ImportError:numpy.core.multiarray导入失败”。是的,已经安装了numpy。 - letmaik
我知道这可能有点老了,但我使用sudo apt-get install python-opencv来安装这个包。显然,cv2.so和cv.py位于/usr/lib/python2.7/dist-packages/下。只是让你们知道一下(Ubuntu 15.04 LTS)。 - Tim

5
在Debian系统上,我使用apt安装了python-opencv、python-virtualenv和python-pip,然后使用选项--system-site-packages创建了一个虚拟环境。

1
运行得非常顺利 - alan

5
从opencv安装指南中(链接)可以得知:
默认情况下,OpenCV构建系统将选择它能找到的最新版本的Python,或者您可以在调用cmake时使用PYTHON_EXECUTABLE变量来强制使用特定版本。
我刚刚按照上面链接中的说明,在虚拟环境--with-no-site-package上在我的ubuntu 11.10上安装了它。您需要一起构建整个opencv及其python包装器。 编辑1:
  1. Create a temporary directory, which we denote as , where you want to put the generated Makefiles, project files as well the object files and output binaries.

    cd ~/opencv
    mkdir release
    cd release
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
    
  2. Enter the created temporary directory () and proceed with:

    make
    sudo make install
    
在构建和安装后,请将扩展模块添加到PYTHON_PATH中。
export PYTHONPATH=~/projects/opencv/release/lib:$PYTHONPATH

我按照你提到的步骤进行了操作。在执行 "sudo make install" 后,我收到了一个安装成功的消息。然而,当我在 Python 中导入 opencv2 时,出现了导入错误。你有什么想法应该怎么做吗? - MAS
请确保您的PYTHONPATH指向opencv,就像本帖子中提到的那样。 - pylover
我已将其添加到我的.bash_profile文件中。当我在虚拟环境中执行“pip freeze”时,我没有看到opencv。我觉得这很奇怪。 - MAS
1
我按照这个做了,不过在 virtualenv 激活状态下进行的。它奏效了! - KenobiBastila

0

通过将Python可执行文件作为参数传递给cmake,可以实现这一点。我建议您使用本地安装文件夹,这样您根本不需要sudo权限。然后,如果make install没有要求您提供sudo权限,那么它可能会针对您的虚拟环境Python。

使用cmake-gui打开cmakelists.txt以查看Python变量。如果您的虚拟环境中没有numpy,则还可能出现错误,因此您知道它正在选择正确的Python。这也适用于独立于Python版本的情况,因为它是专门为您的Python可执行文件构建的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接