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.7\Lib\site-packages\PyQt5\plugins
然后把这个目录里面的所有目录, 放到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环境, 经测试, 其实只需要plugins\platforms文件夹就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值