pyQT生成的exe通过win32com调用其他QT的exe报错的问题

自己个人有一个小工具,用于开发效率化的,需要通过win32com去调用其他exe。
然而在某个exe升级后,再使用我的tool去调用该 exe时,会报出如下问题(升级前OKAY)
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

以下是我艰辛的debug步骤,最后附上规避方法
#1.手动打开该exe,可正常使用,无错误报出

#2.我的工具架构时基于python+pyQT的一个纯python方案,我直接运行python脚本,去执行相应的操作,并不会报这个QT插件的error,使用pyinstaller打包后,这个问题必现

#3.基于#2,初步怀疑是pyinstaller有问题,所以尝试写一个最简单的通过win32 dispatch exe的脚本,并通过pyinstaller打包
看以下代码块,按照预期,应该也会报一样的错,然鹅,并没有,正常执行

from win32com.client import Dispatch
import sys
VISIBLE = True
PREFIXLOGNAME = True

def Initxxx():
    xxx_app = Dispatch('xxx.Application')
    if xxx_app == 0:
        print("open xxx application error")
        sys.exit(0)
    print(" Version: "+xxx_app .AppVersion+"\n")
    xxx_app .Visible = VISIBLE
    xxx_app .PrefixLogName = PREFIXLOGNAME 
Initxxx()

#4.基于#3,基本可以确定是由于我的tool的PyQT,与要打开exe的QT不兼容,导致的问题,那么又该如何解决呢

Google了一堆,基本都是推荐将pyQT5下面的插件拷贝到pyQT_TOOLs,一一尝试,都没有用,而且这些也都解决不了我的问题,手动打开可以,使用脚本执行打开可以,用pyinstaller打包之后,就报插件error的问题

解决方案:
最后,还是从pyinstaller这个打包方式着手,网上很难找到资料,就是直接运行脚本和用pyinstaller打包有什么区别
我个人怀疑是Pyinstaller打包的某些参数配置,导致了我这个问题,但是在尝试了参数之后,都解决不了问题,应该还是个人学艺不精
无可奈何下,弃用了pyinstaller打包方案,使用了nuitka打包
使用以下命令
–nofollow-imports 使用这个,就不会把各种三方库都打包进来,节约打包时间
-follow-import-to=xxx,xxxx 需要include进来的模块,可以在这里添加,使用相对路径,相对于你的入口文件
nuitka --standalone --mingw64 --show-memory --show-progress --nofollow-imports --plugin-enable=qt-plugins --follow-import-to=xxx,xxxx --output-dir=output xxx.py

更多nuitka的资料,请查看其他博主的文章
打包完成后(坑相对比较多),就可以成功运行了,解决了上述的问题,感觉是柳暗花明又一春,哈哈哈,还喜提了一个运行速度加快的好处

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值