是否可以从 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 在 Jupyter notebook 中执行 Python 脚本