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

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

一:环境

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文件夹就可以了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/923243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存