栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyinstaller QT打包exe,application failed because not find or load the Qt platform plugin “windows“

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyinstaller QT打包exe,application failed because not find or load the Qt platform plugin “windows“

一:环境

python:我使用的是python2.7
安装的pyinstaller是:
pip install pyinstaller==3.2.1
qt5安装的是:
pip install python-qt5
然后在脚本中使用了qt, 编译的时候, 使用命令
pyinstaller -F -w test.py
进行编译, 我本地跑没有问题, 但是放在一个win11的环境下就提示这个问题了:application failed because not find or load the Qt platform plugin "windows"...

二:寻找解决方案的历程:

如果把这个报错在百度上搜索一下, 结果肯定是很多的,这里举两个例子:

1. 拷贝qt插件到exe同目录

在自己python环境下找到如下目录
python2.7Libsite-packagesPyQt5plugins
然后把这个目录里面的所有目录, 放到exe同目录下。

2. 使用pyinstaller -D

pyinstaller -F的意思是, 把dll之类的,包括一些pyd文件什么的, 总之一切运行的依赖都合并到一个exe中。
如果我们使用pyinstaller -D的话, 就会把这些dll, pyd什么的拆出来。

3. 其他方法

网上搜索下来,无非就上面两种, 大部分是第一种,不同点无非就是拷贝插件的那些文件夹, 哪些dll之类的,没有太大区别

三:可行的一个解决方法

那就是直接在代码里面设置你的插件环境

  1. 把你的python环境中的插件拷贝到你编译的目标py文件旁边
    结构类似如下:
 | target.py
 | plugins
 	| imageforms
 	| platforms
 	| 插件中其他所有的文件夹
  1. 在目标py文件中,qt实例创建之前声明:
# 解释一下: 
# os.path.realpath(sys.executable)是pyintaller打包之后可用的获取当前文件目录的方法
# QApplication.setLibraryPaths([])的设置要在QApplication()初始化之前
QApplication.setLibraryPaths([os.path.join(os.path.dirname(os.path.realpath(sys.executable)), 'plugins')])
app = QApplication(sys.argv)
  1. 打包
还是正常的操作:
pyinstaller -F -w target.py
即可

上面几步做完之后, exe运行的时候, 就回去找同目录下的plugins目录为qt的插件目录了, 这样放在其他环境下也无所谓, 毕竟自带了qt环境, 经测试, 其实只需要pluginsplatforms文件夹就可以了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875949.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号