无法捆绑的OpenCV和PyQt5

问题描述:

我希望捆绑一些Python代码到一个分布式应用程序(.app文件),但有麻烦越来越OpenCV的 PyQt5到应用程序中。 无论,在另一方面,做工精细。无法捆绑的OpenCV和PyQt5

我已经剥夺我所有的代码和问题仍然存在。请参见下面的代码示例:

# Works absolutely fine 
import cv2 
print("Hi there opencv v{0} user!".format(cv2.__version__)) 

# Works absolutely fine 
from PyQt5.QtCore import * 
print("Qt version {0}".format(QT_VERSION_STR)) 

# Does not work, see below 
import cv2 
from PyQt5.QtCore import * 
print("Qt version {0}".format(QT_VERSION_STR)) 
print("opencv version {0}".format(cv2.__version__)) 

并以“不行”,我的意思是它捆绑没有错误(python3.5 -m pyinstaller samplecode.py),但不能执行。相反,该程序退出并返回一个错误:

Traceback (most recent call last): 
    File "/Users/*****/build/test.py", line 1, in <module> 
    import cv2 
    File "/Users/*****/build/PyInstaller/loader/pyimod03_importers.py", line 631, in exec_module 
    exec(bytecode, module.__dict__) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/cv2/__init__.py", line 9, in <module> 
    from .cv2 import * 
    File "/Users/*****/build/PyInstaller/loader/pyimod03_importers.py", line 714, in load_module 
    module = loader.load_module(fullname) 
ImportError: dlopen(/Users/*****/build/test/dist/test/cv2.cv2.so, 2): Symbol not found: __ZN10QByteArray11shared_nullE 
    Referenced from: /Users/*****/build/test/dist/test/QtTest 
    Expected in: /Users/*****/build/test/dist/test/QtCore 
in /Users/*****/build/test/dist/test/QtTest 
[20049] Failed to execute script test 

星星只是替换我的个人和项目文件夹名称。

我试图手动复制cv2.so文件,重命名它cv2.cv2.so并且将其放置在文件夹中。这产生了一个稍微不同的错误:

Traceback (most recent call last): 
    File "/Users/*****/build/test.py", line 1, in <module> 
    import cv2 
    File "/Users/*****/build/PyInstaller/loader/pyimod03_importers.py", line 631, in exec_module 
    exec(bytecode, module.__dict__) 
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/cv2/__init__.py", line 9, in <module> 
    from .cv2 import * 
    File "/Users/*****/build/PyInstaller/loader/pyimod03_importers.py", line 714, in load_module 
    module = loader.load_module(fullname) 
ImportError: dlopen(/Users/*****/build/test/dist/test/cv2.cv2.so, 2): Library not loaded: @loader_path/.dylibs/QtGui 
    Referenced from: /Users/*****/build/test/dist/test/cv2.cv2.so 
    Reason: image not found 

我也试过cx_freeze和py2app但不能让这些来工作的。我最远的有pyinstaller,所以我更喜欢使用这个发展似乎是最活跃的。

我运行MacOS的10.12,并纷纷转载运行同一个操作系统上的另一个全新安装的MacBook错误。我使用Python 3.5.4,5.9.1 PyQt的,OpenCV的3.3.0。对于PyInstaller我试过3.2.1和最新开发。

谁能帮助我了解和解决这个错误?

我遇到(使用MacOS的10.11.6)试图执行我的应用程序,这是我使用pyinstaller还内置当这些同样的错误。我能够通过自嘲的OpenCV和pyinstaller以下版本成功地解决我的问题:

pip install opencv-python == 3.1.0.4 
pip install pyinstaller == 3.3.1 

这不是一个令人满意的解决方案,但它可能是值得一试,如果你还在这个问题挣扎。