使用OpenCV创建应用程序可执行文件?

6
我设计了一个在Windows下使用opencv的Python小应用程序。我正在尝试创建一个可执行文件,以便任何人都可以安装和使用它,而不必安装python/opencv/numpy等内容。
我尝试使用py2exe来实现这个目标。虽然在构建过程中出现了警告,但实际上它创建了一个.exe文件。
*** copy dlls ***
copying C:\Windows\system32\MSVFW32.dll -> 
...
The following modules appear to be missing
['cv2.cv']

当我尝试使用命令行运行.exe文件时,看到以下信息:
ImportError: numpy.core.multiarray failed to import

我的setup.py文件非常简单:

# creating executable here
from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
    options = {'py2exe': {'bundle_files': 1}},
    console=['facemovie.py'],
    zipfile = None,
)

你有什么想法可以解决这个问题吗?这是我第一次尝试部署,可能会漏掉一些步骤。

谢谢!

4个回答

3
我建议使用PyInstaller。我曾经用它来处理一个项目,其中包含pycrypto和twisted,并且效果非常好。请参考PyInstaller

3

根据这篇文章py2exe无法检测到该模块在ZIP归档文件中所需。我不知道正确的语法,因此您需要查看文档,但可以尝试:

python setup.py py2exe -p cv2

或者您可以尝试将setup.py调整为以下内容:

options = {'py2exe': {'bundle_files': 1, 'packages': 'cv2' } },

如果您想尝试完全不同的东西,可以看一下 bbfreeze

从Python脚本中创建独立的可执行文件。


2
感谢karlphilip,你让我找到了正确的解决方法。
我想避免使用“更改我的软件”工具来解决问题,所以我选择了py2exe。
实际上,opencv被正确地发现了,但是库本身有一个numpy依赖项,这一点没有被检测到。
因此,我的解决方案最终是: options = {'py2exe': {'bundle_files': 1, 'includes': 'numpy' } },
最终的可执行文件非常大,但是运行顺畅。
我没有在另一台没有安装该软件的计算机上尝试过,所以可能会有一些意外情况。
感谢你们的帮助。

1
你在4年前提出了这个问题。我很好奇,你有没有尝试在另一台没有安装OpenCV的电脑上运行?如果是这样,我很想知道它是否能够正常工作。 - Fabio
这已经是很久以前的事了,所以我记不太清楚,但我非常有信心我曾经在没有安装OpenCV的PC上尝试过这个。 :) - jlengrand

0

我遇到了同样的问题。我通过将图像文件移动到可执行文件创建的文件夹中来解决它。这对py2exe和pyinstaller都有效。


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