PyInstaller或PyQt的坑

最近在用PyInstaller做个小界面,里面用到了PyQt和OpenCv,其中遇到了很多坑,也不算都解决了吧,总之避过了,最后运行成功。

  1. Qt的版本问题
1
2
ModuleNotFoundError: No module named 'PySide'
qtpy.PythonQtError: No Qt bindings could be found

当遇到这两个错误提示的时候,可能就是Qt的版本问题了

这个是个大坑,系统如果安装Qt的话是一个版本,然后PyQt中的Core可能是另一个版本,如果要用Conda的话Conda还有个自带的Qt版本。。。最后的解决办法是删掉系统安装的Qt或者让PyInstaller只识别到Conda中的Qt,还记得装PyQt时候要和Conda的Qt版本相兼容。利用qtdiag可以查看Qt的版本,利用下面命令查看PyQt的版本。

1
2
from PyQt5.QtCore import QT_VERSION_STR
print(QT_VERSION_STR)
  1. opencv的版本问题

1
2
3
4
5
6
File "/Users/alex/.pyenv/versions/anaconda3-5.2.0/envs/labelme/lib/python3.6/site-packages/cv2/__init__.py", line 3, in <module>
from .cv2 import *
File "/Users/alex/.pyenv/versions/anaconda3-5.2.0/envs/labelme/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 714, in load_module
module = loader.load_module(fullname)
ImportError: dlopen(/var/folders/kc/wb0c3crx2_g9r10n4vjywlhc0000gn/T/_MEIo9bwqe/cv2.cv2.so, 2): Symbol not found: __ZN10QByteArray11shared_nullE
Referenced from: /var/folders/kc/wb0c3crx2_g9r10n4vjywlhc0000gn/T/_MEIo9bwqe/QtTest

上面是opencv最新版本的报错,opencv自从3.3.0.9之后就会和不知道Qt还是Pyinstaller不对付,所以在Conda里面装这个版本。

  1. 最好使用pyhton -m PyInstaller而不是直接使用pyisntaller,后者在多版本的时候可能有时候会有问题,另外注意大小写。