pyinstaller、cxfreeze打包python程序生成.exe,出现闪退问题,和not find or load the Qt platform plugin "windows"

背景

最近写了个小程序,使用Pyinstaller和cxfreeze打包均出现错误,要么是闪退,要么就有个黑控制台,后来查阅很多信息,终于解决,但目前头疼的只剩下打包的文件过大这个毛病,跨平台语言一般都有这个毛病吧。所以试了试两个打包程序,最后发现还是cxfreeze打包时,总体积小一点。

建议

不管出现什么情况,把你打包的exe程序拖到cmd命令行中,回车看看有什么错误信息打印出来,这种方法很清晰的知道出现哪些错误。

pyinstaller打包问题

因为我使用的是PyQt5写的一个窗口小程序,使用pyinstaller打包程序时出现,意思是QT库里面少了东西,需要我们自己加上动态链接库:
it could not find or load the Qt platform plugin "windows"
在网上查阅了很多,发现是打包的时候缺少动态链接库,需要在Python的Script文件中找一个叫plugins的文件夹(只要里面那个platforms的文件夹),把plugins文件夹拷贝到自己打包的exe程序目录就行了。
我也像网上的说法那样查找这个文件夹,但是找了很久没找到,因为的的python是在anconda环境下的,后来终于找到这个plugins的文件夹了,鉴于这个文件夹比较难找,我就把它拷贝出来,存到CSDN了,有需要的可以直接到连接的地方下载。下载后直接拷贝到自己的exe程序目录下,双击程序就能运行。
下载地址:https://download.csdn.net/download/qq_35203425/10539384

cxfreeze打包问题

cxfreeze打包工程文件生成.exe,包含numpy,matplotlib, mutiprocess等工具包,运行exe出现闪退问题,使用cxfreeze打包,注意cxfreeze的版本要和python的完全一致,生成的.exe如果有闪退问题,可创建一个如下的.py文件,用cmd、dos运行,查看闪退原因。
但是我的程序在cmd命令行中却能运行。。。真是奇怪了,后来我就试一下把上面说的plugins文件夹也拷贝到cxfreeze打包的exe文件的目录下,这下是不闪退了,但是出现一个那么大的命令行程序,我这明明是窗口程序,却出现那么大命令行程序,啧啧啧,难以忍受,后来又仔细查找原因,终于解决。
解决办法:
当时用cxfreeze打包时,想要隐藏控制台,可以加入一个参数:
--base-name="win32gui"
如:cxfreeze hello.py –base-name=”win32gui”

当你使用PyInstaller打包包含Qt库的应用时,错误消息`Could not find the Qt platform plugin "windows"`通常表示在打包过程中,PyInstaller没有找到Windows平台对应的Qt插件。Qt库依赖于特定平台的插件来提供图形界面支持。 以下是可能导致这个错误的一些原因和解决方法: 1. **Qt插件路径问题**:确保你的项目中已经包含了QtWindows平台插件(通常在`Qt安装目录/plugins/platforms`下)。在打包时,你需要将这个目录添加到PyInstaller的搜索路径中。你可以通过`--add-data`或`--paths`选项指定。 ```bash pyinstaller myapp.py --add-data="path/to/Qt/plugins/platforms;platforms" ``` 2. **环境变量设置**:检查系统环境变量`QT_PLUGIN_PATH`是否包含了正确的插件路径。如果打包是在不同的环境中运行,可能需要更新该环境变量。 3. **使用静链接**:Qt有时会提供静态链接的库,这可能会避免对动态插件的需求。确保你在配置中选择了正确的编译选项。 4. **Qt版本兼容性**:确认你的PyInstaller版本和Qt版本之间存在兼容性。不兼容的版本可能导致找不到正确的插件。 5. **重新配置PyInstaller**:如果你使用的是PyInstaller的`spec`文件,确保在`a.datas`部分正确配置了插件路径。 相关问题: 1. 如何检查和修改系统环境变量`QT_PLUGIN_PATH`? 2. PyInstaller如何处理不同版本的Qt库? 3. 如何确定我的应用是否适合使用静态链接的Qt库?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值