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同目录下。
pyinstaller -F
的意思是, 把dll之类的,包括一些pyd文件什么的, 总之一切运行的依赖都合并到一个exe中。
如果我们使用pyinstaller -D
的话, 就会把这些dll, pyd什么的拆出来。
网上搜索下来,无非就上面两种, 大部分是第一种,不同点无非就是拷贝插件的那些文件夹, 哪些dll之类的,没有太大区别
三:可行的一个解决方法那就是直接在代码里面设置你的插件环境
- 把你的python环境中的插件拷贝到你编译的目标py文件旁边
结构类似如下:
| target.py
| plugins
| imageforms
| platforms
| 插件中其他所有的文件夹
- 在目标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)
- 打包
还是正常的 *** 作:
pyinstaller -F -w target.py
即可
上面几步做完之后, exe运行的时候, 就回去找同目录下的plugins
目录为qt
的插件目录了, 这样放在其他环境下也无所谓, 毕竟自带了qt环境, 经测试, 其实只需要plugins\platforms
文件夹就可以了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)