环境:mac os x 10.7.5、xcode 4.2.1、python 2.7.5、opencv 2.4.7、py2app 0.7.3
我正在尝试使用 py2app 打包一个简单的基于 opencv 的 python 脚本,但构建的应用程序崩溃并出现错误,提示 ImportError: numpy.core.multiarray failed to import
这是名为 demoApp.py 的 python 脚本
import cv2
capture = cv2.VideoCapture(0)
winName = 'eyeDetection'
cv2.namedWindow(winName)
# Press esc key to exit
keyPressed = -1
while(keyPressed != 27): # ord('esc') is 27
unused_retval, img0 = capture.read()
img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)
cv2.imshow(winName, img1)
keyPressed = cv2.waitKey(1)
cv2.destroyAllWindows()
demoApp.py 从 eclipse+pydev IDE 启动时按预期运行。
我创建了 setup.py 文件:
py2applet --make-setup demoApp.py
内容如下:
"""
This is a setup.py script generated by py2applet
Usage:
python setup.py py2app
"""
from setuptools import setup
APP = ['demoApp.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
然后我构建应用程序:
python setup.py py2app
运行该应用程序会导致其崩溃并出现上述 ImportError。
我删除了 build 和 dist 文件夹并尝试以“别名”模式构建应用程序:
python setup.py py2app -A
然后,当我运行该应用程序时,它会按预期运行。所以我不明白为什么独立应用程序在构建分发时无法运行。
请帮我弄清楚如何处理这个问题。另外,demoApp.app 是 50Mb,如何减小它的大小?
最佳答案
虽然我还没有找到合适的解决方案,这个问题可能是由于 64 位 python27 和 32 位 numpy 可计算性问题引起的,但快速解决方法是在导入 cv2 之前在 demoApp.py 脚本中 import numpy
.
在使用 PyInstaller 之后demoApp.app 文件现在是 6Mb 而不是 py2app 而不是 50Mb :D
尽管通过 PyInstaller 生成的应用在没有上述解决方法的情况下也出现了同样的问题。
关于Python+OpenCV+py2app : numpy. core.multiarray导入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242421/