记pyqt5遇到的坑ImportError: unable to find Qt5Core.dll on PATH

目录

前言

环境配置

开发打包

问题及解决办法


前言


刚学习python没多久,研究了pyqt5框架,就兴致勃勃的弄了个demo界面小程序,到打包发布exe一切都很顺利,直接运行exe文件时,程序闪退。发现报了个错:ImportError: unable to find Qt5Core.dll on PATH

这个错真是让我头痛不己,百思不得其解,网上找了一圈也没找到类似的问题,最后只能求助bing在国外找找,总算是找到原因所在了(pyqt5框架问题)。在此分享下遇到的这个坑。

环境配置


本机的python环境搭建基于:win10 + python3 + pycharm + pyqt5,具体的安装配置百度都可以找到,我只介绍本机的具体配置。

  • win10系统
  • python3:用的是python3.7 
D:\>python -V
Python 3.7.4
  • pycharm:用的是pycharm2019.2

记pyqt5遇到的坑ImportError: unable to find Qt5Core.dll on PATH_第1张图片

  • pyqt5:用是的PyQt5.13.0.1

开发打包

pycharm安装好,创建第一个demo项目,安装了基本的库及工具。

通过pip工具安装pyqt5库(建议换豆瓣节点:https://pypi.douban.com/simple/下载,pip服务器太慢),以及打包工具pyinstaller

pip install PyqQt5

pip install pyqt5-tools

pip install pyinstaller

然后pycharm配置了外部工具QTDesigner与PyUIC,QTDesigner用于可视图界面设计,还是比较方便的,控件直接拖就可以,我的demo只拖了个按钮进去就行了,保存为mainWin,pycharm就会生成个mainWin.ui文件;使用PyUIC工具将mainWin.ui转化为mainWin.py程序。到此界面制作完成,再新建个demo.py主程序用于python入口:

import sys
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import *
from mainWin import Ui_MainWindow
from PyQt5.QtGui import *

class MyWindows(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MyWindows, self).__init__()
        self.setupUi(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWin = MyWindows()
    myWin.show()
    sys.exit(app.exec_())

到此开发完成,调试一切正常,还是很开心。用pyinstaller工具打包demo.py程序,一切正常,也生成了demo.exe文件,本以为就此结束了,谁知道一运行demo.exe程序闪退。

问题及解决办法

程序闪退,第一反映肯定是有问题了,但是闪退没法跟踪问题,于是在命令行窗口执行exe,显示如下:

D:\>"D:\python project\demo\dist\demo.exe"
Traceback (most recent call last):
  File "demo.py", line 3, in 
  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 
  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

D:\>

这就奇怪了,看错误是说系统path路径下找不到dll库,以为是缺少路径了,于是就在系统环境变量path里把pyqt5的库目录给加进去,发现还是没用,没办法只能去网上寻找答案,但是找了一大圈还是没找到解决办法,几翻折腾下,还是在必应里找到几个网站,才明白原因。

https://stackoverflow.com/questions/56949297/how-to-fix-importerror-unable-to-find-qt5core-dll-on-path-after-pyinstaller-b

https://github.com/pyinstaller/pyinstaller/issues/4293

里面描述的比较详细,具体就不详说了。总的来说呢,就是有的版本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就能完美运行了

 

你可能感兴趣的:(python,python3,pyqt5,importError,Qt5Core)