PyQt5遇到的一個坑 "ImportError: unable to find Qt5Core.dll on PATH" 及解決辦法


最近再實現一個功能,主要是將自動化測試界面化

環境組合為:Windows 64bit + PyCharm + Python + PyQt5 + Pyinstaller + Inno Setup

PS C:\windows\system32> python -V
Python 3.7.0
PS C:\windows\system32> pip show pyqt5
Name: PyQt5
Version: 5.13.0
Summary: Python bindings for the Qt cross platform UI and application toolkit
Home-page: https://www.riverbankcomputing.com/software/pyqt/
Author: Riverbank Computing Limited
Author-email: info@riverbankcomputing.com
License: GPL v3
Location: c:\program files\python37\lib\site-packages
Requires: PyQt5-sip
Required-by: pyqt5-tools

主要的操作流程為:

1、使用pyqt5-tools制作畫面,再用pyuic5和pyrcc5生成對應的 .py文件

2、實現界面中各個功能,並在Pycharm中運行,界面打開正常,各個功能也正常

3、使用Pyinstaller進行打包(不是打包成一個exe文件,是打包成一個文件夾,所有的文件全部在里面)

4、使用Inno Setup工具進行打包成一個單獨的可執行exe文件

5、在本機安裝exe進行測試和在其它機器上安裝測試查看功能是否正常

 

下面講第5步中在其它人電腦中安裝后打開遇到的問題,本機未遇到過。遇到的問題就是界面一閃而過,根本就看不到報的是什么錯,下面就介紹一種可以查看具體錯誤的方法:

1、打開命令窗口,切換至程序所在目錄

2、直接輸入 XXX.exe查看錯誤結果

PS C:\Program Files (x86)\DOU> dougui
dougui : 無法將“dougui”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑
正確,然后再試一次。
所在位置 行:1 字符: 1
+ dougui
+ ~~~~~~
    + CategoryInfo          : ObjectNotFound: (dougui:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Suggestion [3,General]: 找不到命令 dougui,但它確實存在於當前位置。默認情況下,Windows PowerShell 不會從當前位置加載命令。如果信任此命令,請改為鍵入“.\dougui”。有關詳細信息,請參閱 "get-help about_Command_Precedence"。
PS C:\Program Files (x86)\DOU> .\dougui
Traceback (most recent call last):
  File "dou\dougui.py", line 14, in <module>
  File "c:\program files\python37\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
  File "site-packages\PyQt5\__init__.py", line 41, in <module>
  File "site-packages\PyQt5\__init__.py", line 33, in find_qt
ImportError: unable to find Qt5Core.dll on PATH
[12476] Failed to execute script dougui

備注:從上面的錯誤來看有點讓人費解,在本機中安裝可以正常打開,只在其它人機器上打不開,但從錯誤來看打不到這個dll文件也有點奇怪,在安裝目錄下明明有這個文件,難道它不是從這個安裝路徑或者環境變量中去找對應的文件,於是從網上去搜索一下有沒有類似的問題解決辦法,說來也真巧,難道跟今天搶到過年回家的火車票有關系,很快就找到答案,如下兩個鏈接:

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代碼如下:

 1 import os
 2 import sys
 3 import time
 4 import ctypes
 5 import subprocess
 6 if hasattr(sys, 'frozen'): 7 os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']  8 from datetime import datetime
 9 from PyQt5 import QtCore, QtGui
10 from PyQt5.QtCore import QThread
11 from PyQt5.QtWidgets import QMainWindow
12 from PyQt5.QtWidgets import QApplication
13 from DouUI import Ui_MainWindow

然后重新打包再次去運行,果然正常了。

 

注:據說這個問題在新版本的PyQt5中(5.13.1),已經解決了。 升級到新版本就行了。但由於我是用的pyqt5-tools畫的界面,把pyqt5升級上去后,pyqt5-tools就提示不兼容,所以就暫時先用這種方法解決這個問題,待后面pyqt5-tools有同步更新版本后再一起升級pyqt5和pyqt5-tools


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM