不得不说pyinstaller坑是真的多,去年打包的时候折磨我一整天,最后弄好了但很烦躁,没做记录,今年又折磨我一整天,一定要把坑记录下来
一.打包命令
pyinstaller ChargeDataTools.py --paths D:\python37\Lib\site-packages\shiboken2 --noconsole --hidden-import PySide2.QtXml --icon="icon.ico"
- 打包日志提示lib not found: shiboken2.abi3.dll之类的都加–paths D:\python37\Lib\site-packages\shiboken2(去年好像就是这个屎不啃折磨的我)
- 打开exe文件不带dos窗口就加–noconsole
- –hidden-import PySide2.QtXml这句一定要加,不管代码里导没导入这个库(刚开始以为代码没用这个库就不用加这句)
- –icon="icon.ico"加图标要去网上把png格式的图片转成ico格式
二.打包要用开发环境打包(pycharm中的venv),或者用其他环境打包要把库安全了才行,不知道没有pywin32或者pypiwin32行不行,反正网上有人说要安装这两个库,那就安一下呗。
三.打包时日志提示UPX is not available
- 去官网下载UPX:https://upx.github.io/
- 我下的是这个
3.把upx.exe放进打包环境的python/Scripts下
四.报错This application failed to start because no Qt platform plugin could be initialized
这个报错困扰了我一整天,其实这个并不是真正的报错信息,当打包命令不加去掉dos窗口的时候你就会看见真正的报错是什么:
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
我在网上查了好久,很多帖子都说得是打包之前执行py文件发生的错误(如果你也是执行py文件那可以上网查,全都是)。然而我是打包之后执行exe发生的
解决方法:将pyside2中的platforms文件夹整个复制到打包后的dist中的exe文件同级就可以了
五.打开exe时报错Failed to execute script
原因有很多,我的原因是我用的动态加载ui文件,打包后需要手动把ui文件放进exe同级目录里就好了(还有图标等各种素材也要放进去)