【发布时间】:2018-02-13 11:28:51
【问题描述】:
我想将一些 python 代码捆绑到一个可分发的应用程序(.app 文件)中,但是在将 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、PyQt 5.9.1、OpenCV 3.3.0。对于 PyInstaller,我尝试了 3.2.1 和最新的开发。
谁能帮我理解和解决这个错误?
【问题讨论】:
标签: python qt opencv pyqt5 pyinstaller