解决使用pyside2的程序打包生成exe后无法启动,报no Qt platform plugin的问题
最近在尝试使用PySide2作为Python开发的界面框架,因为相对于PyQt框架的GPL协议来说,PySide2的LGPL协议更加开放,具体开源协议的区别可以参考我的其他文章:

下面主要记录我在使用pyside2时遇到的关于生成exe后程序无法启动的问题,以便参考!

运行环境

Python:3.7.3
PySide2:5.13.1
pyinstaller:3.5
我在使用如上开发环境将Python代码编译为exe可执行文件后,双击启动文件,报如下错误:
pyside1.png

This application failed to start because no Qt platform plugin could be initialized.Reinstalling the application may fix this problem.

解决方案

经过多次测试发现,问题原因在于pyinstaller打包时未正确的将qt相关的文件打包。具体可能跟Python和pyside2的版本有关,按如下操作可以解决因为qt相关组件未打包到exe中出现的问题

  1. 首先将Python版本切换到Python3.6,可以使用anaconda创建虚拟Python环境,我这里创建后的是python3.6.7版本
    pyside5.png
  2. 然后使用pip命令安装pyside2的5.12.x版本,不要使用conda命令安装,因为可能会出现pycharm无法进行代码提示的问题。pip命令如下
    pip install pyside2==5.12.4
  3. 然后使用pyinstaller打包即可
    pyinstaller -w main.py

如果是使用anaconda创建的虚拟python3.6环境,需要先在cmd中先激活该环境,再使用pip命令安装,激活命令如下

activate python3.6

如果安装出现问题,也可以使用如下命令安装pyside2:

pip install --index-url=http://download.qt.io/snapshots/ci/pyside/5.12/latest pyside2 --trusted-host download.qt.io

问题分析

问题原因在于缺少相关启动组件导致的exe无法启动,网上找到的答案基本都是将platforms目录加入环境变量或加入到程序代码中,可是这只能解决在开发机器上运行的问题,在生成exe后由于依然没有相关qt组件,放到其他电脑是同样无法运行的。所以如果遇到该问题,可以按本文提供的方案尝试解决。
该问题可能会随着Python或pyside2的版本推移得到解决,如果大家在后续开发中遇到类似问题,也可以尝试切换程序版本的思路进行测试,以解决由于版本兼容性而出现的问题。

网上的一些解决方案如下

pyside4.png

方案1:
在程序代码前面加这些代码

dirname = os.path.dirname(PySide2.__file__) 
plugin_path = os.path.join(dirname, 'plugins', 'platforms') 
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path

方案2:

修改环境变量

pyside2.png

# coding:utf-8
import sys
from PySide2 import QtWidgets


class App(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()


def main():
    app = QtWidgets.QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
© 版权声明
THE END
喜欢就支持以下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

图片正在生成中,请稍后...