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: [email protected]
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

原文地址:https://www.cnblogs.com/aziji/p/12084343.html

时间: 2024-11-10 10:14:50

PyQt5遇到的一个坑 "ImportError: unable to find Qt5Core.dll on PATH" 及解决办法的相关文章

Unable to execute dex: Multiple dex files define 解决办法

描述: eclipse开发的程序,编译没错误,但是run的时候报错 Unable to execute dex: Multiple dex files define 网上找了好多答案,最后终于被解决了 此问题是因为你有重复引用的jar包.  解决办法是查看你的build path,尤其是Android Dependencies一定有重复引入的.jar包,解决的方法是在libs删除重复的jar包即可 参考的这位:http://blog.sina.com.cn/s/blog_4b9b6ad00101

关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!

例如:一个页面有一个按钮,点击的时候用ajax去后台获取数据,获取成功以后返回.下次再点击的时候就不要去获取数据了. 解决办法有很多: 1.用Get方法去读数据,会缓存. 2.用jquery的data方法去手动缓存,读数据的时候判断缓存是否存在. 我的解决办法是在按钮加载的时候给按钮一个标志它未去后台获取过数据的属性(如readnot). 然后在第一次去后台获取数据成功后使用removeAttr("readnot")移除这个属性即可. 这样只要在每次点击按钮的时候判断是否存在readn

git clone 时出现fatal:unable to access 如下情况报错及解决办法

克隆公司的项目直接是git clone +远程项目地址,一般是没问题的,但是最近发现想要再克隆一份时报错,之前操作都没问题,很郁闷,网上查了各种办法,也试了很多,都不管用,没找到根本问题. 后来在同事的帮助下,终于知道了原因.即使你是新入职的员工根据远程地址克隆不下来项目时除了,我上一篇写的问题之外,还有一个原因就是线上地址不正确.这当然不是你的错,解决办法就是问老员工,让他们查看下真正的远程地址:使用  git remote  -v ,即可查看,然后把地址发你,重新克隆就可以啦!可能也会有其他

Unable to find the wrapper &quot;https&quot;错误的解决办法

PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误:Warning: fopen() [function.fopen]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? 这个错误分3种解决方案:1.windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;删掉

执行Hadoop相关命令时出现 Unable to load native-hadoop library for your platform... 解决办法

在安装Hadoop伪分布环境后,执行相关命令(例如:bin/hdfs dfs -ls)会出现 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable,这是因为安装的navtive包和平台不匹配的缘故,需要重新编译Hadoop源码包,然后将navtive包进行替换

lvs 一个网卡单个管理ip,多个跨网段VIP解决办法

说明:lvs的vip和realserver的rip是可以跨网段的 ifconfig输出如下: [[email protected] scripts]# ifconfig  eth0      Link encap:Ethernet  HWaddr 00:50:56:84:86:FB             inet6 addr: fe80::250:56ff:fe84:86fb/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...解决办法

在执行Hadoop命令的时候会出现这样的警告: 解决办法: 在profile文件中添加:export JAVA_LIBRARY_PATH=${HADOOP_HOME}/lib/native 这是在调用Hadoop里的库.具体可以参考www.cnblogs.com/gpcuster/archive/2011/02/17/1957042.html

“selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities“解决办法

问题: 原因:firefox浏览器版本和浏览器驱动版本不匹配 解决办法:卸载高版本浏览器,安装低版本浏览器 下载地址:http://ftp.mozilla.org/pub/firefox/releases/ 比如http://ftp.mozilla.org/pub/firefox/releases/58.0/win64/zh-CN/ 58.0指版本,win64指64位,zh-CN指简体中文 目前我能成功的环境为: 驱动:geckodriver-v0.24.0-win64.zip   浏览器:v5

异常:未能加载文件或程序集”DAL”或它的某一个依赖项——解决办法

下面是我再使用抽象工厂+反射重构机房时,在Factoy中出现了下面一个问题: 去网上查了一下资料,发现这是一个很普遍的问题,它出现的原因主要有两种: 第一种: 加载DLL路径错误.解决办法是调整D层生成DLL的路径到UI的bin文件夹中.如下图: 反射的一个原则是:一切皆以UI层的bin文件夹中的dll名称为中心,说白一点,dll就是一个类库.我理解的反射,就是一串拼接的字符串,组成要实例化的类的名字.使用反射加载类时,默认是从UI层中的bin中找的,所以要在UI的bin文件夹下生成D层类的dl