Python + OpenCV + py2app:numpy.core.multiarray无法导入

时间:2013-11-27 12:23:14

标签: python macos opencv numpy py2app

环境: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()
从eclipse + pydev IDE启动时,demoApp.py按预期运行。

我创建了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,我该如何减小它的大小?

1 个答案:

答案 0 :(得分:2)

虽然我没有找到合适的解决方案,但这个问题可能是由于64位python27和32位numpy可计算性问题,在导入cv2之前,在demoApp.py脚本中快速解决了import numpy

并且在使用PyInstaller而不是py2app之后,demoApp.app文件现在是6Mb而不是50Mb:D

虽然通过PyInstaller生成的应用程序在没有上述解决方法的情况下给出了同样的问题。