pyinstaller打包pyqt生成的exe,直接运行exe文件时,程序闪退。发现报了个错:ImportError: unable to find Qt5Core.dll on PATH
问题及解决办法
程序闪退,第一反映肯定是有问题了,但是闪退没法跟踪问题,于是在命令行窗口执行exe,显示如下:
D:\>"D:\python project\demo\dist\demo.exe"
Traceback (most recent call last):
File "demo.py", line 3, in <module>
File "d:\python project\demo\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\PyQt5\__init__.py", line 41, in <module>
File "lib\site-packages\PyQt5\__init__.py", line 33, in find_qt
ImportError: unable to find Qt5Core.dll on PATH
[11632] Failed to execute script demo
这就奇怪了,看错误是说系统path路径下找不到dll库,以为是缺少路径了,于是就在系统环境变量path里把pyqt5的库目录给加进去,发现还是没用,没办法只能去网上寻找答案,但是找了一大圈还是没找到解决办法,几翻折腾下,还是在必应里找到几个网站,才明白原因。
具体就不详说了。总的来说呢,就是有的版本pyqt5库对系统变量的加载存在bug,具体原因只有官方才能解释了,咱也没法管了,对有bug的版本库提供一种办法就是,在主程序中pyqt5库import之前就对系统变量进行手动设置,import代码如下:
import sys, os
if hasattr(sys, 'frozen'):
os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import *
from untitled import Ui_MainWindow
from PyQt5.QtGui import *
这样打包之后exe就能完美运行了