踩坑后详细总结!多文件打包pyside2界面为exe问题
一、前言
- 最近为了做个数据处理的程序,考虑到在后面其他操作人员在任何电脑都能进行试验数据处理。因此需要将数据处理程序嵌入到界面中。使用者只需要运行.exe文件就能进行数据处理。
- 之前有了解过python版本的PyQt5以及PySide2以及C++的Qt,但是都没有系统去学,为了在短时间内完成一个界面,我在B站找了白月黑羽.的一个视频,里面刚好有一个例子,于是我就直接用该程序进行了改进。大家可以看一下很容易理解,我当时也就看了前三个视频。然后直接用这个程序。
- 写完程序之后就是需要打包,因为在以后的项目工程中,程序会进行模块化,一个项目会有很多文件,因为我这个程序相对比较简单,所以我只是用了两个文件,一个是Window.py,也就是窗口我呢见,另一个就是DataProces.py就是数据处理文件。在之前的打包中,习惯用的是pyinstaller -F -w name.py,这种是单文件打包。对于多文件,以及Pyside2这个特殊的包不适用本方法。下面就跟大家说一下我遇到过的一些问题。
二、踩坑报错之路
1.No Module named ‘PySide2’
- 说明:本文有两个文件,其中一个是Window.py另一个是DataProcess.py 其中Window.py调用DataProcess.py模块。我一开始使用的打包命令时单文件打包。因为我之前打包过类似的小程序(不含PySide2库),改指令可以用,但是对于本文的情况不能用。
pyinstaller -F -w -i name.ico Name.py
# 解释:-F 表示单文件打包
# -w:不带黑色弹窗
# -i name.ico 打包后的.exe软件显示图标。
# Name.py:就是我们需要打包的py文件
- 如果大家打包.exe对软件图标有要求,需要利用这个链接将图片转换为.ico格式,建议用网站转换,因为之前踩过坑,如果是自己手动更改后缀名会出现打包报错。同时直接复制粘贴的图片可能不是正方形的,对于长宽不相等的图标也会报错。这是个人的踩坑经验,大家可以借鉴一下。
- ico格式转换网址:迅捷PDF转换器.
2.This application failed to start because no Qt platform plugin could be initialized.
3. ModuleNotFoundError: No module named PySide2 [38096] Failed to execute script. ’ Window’ due to unhandled exception.
- 同时使打包过程中的一个问题,其中关于PySide2打包.exe的时候,最常见的一个问题就是显示没用PySide2这个模块。用过网上一些方法,就是在Window.spec文件中手动更改 hiddenimports=[],参数,改为 hiddenimports=[‘PySide2’],具体参考连接,大家可以参考这个文章,讲的挺不错的,但是还是不能解决我这个问题。 文章链接.
4.其他报错
- 其他的报错还有一些偏门的,也找了相关的文章,但是还是解决不了,所以这里就不贴上来了。个人觉得最重要的使关于PySide2 模块的打包以及如果多文件打包,不慌呀,下面就开始干货内容。(其实整篇都是干货,喜欢的可以点赞收藏,防止遇到问题找不到我)
三、解决问题的最终方法
3.1参考链接:
3.2 步骤1:在主程序中添加以下代码
dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
3.3 步骤2 找到PySide2 库的上层目录
3.4步骤3 输出打包指令
pyinstaller -F -w -i Background.ico Window.py -p DataProcess.py -p C:\Users\19446\Anaconda3\envs\qt\Lib\site-packages
"""
参数解释:
-w:不带黑框
-i Background.ico : .exe软件需要显示图标为Background.ico 图片
Window.py:打包主程序
-p DataProcess.py: 打包的第二个程序,打包的第二个文件前需要加上参数-p
p C:\Users\19446\Anaconda3\envs\qt\Lib\site-packages:就是步骤2中获得的PySide2库的打包,这样打包的话就不会报错显示没用PySide2库了,而且打包后.exe也不大。
"""
3.5 打包结果
-
打包后会生成几个文件夹,我们需要的.exe软件在dist中,同时将用到的图标都放在指定的位置就能直接运行了。 -
将需要的文件以及要用到的图标进行打包整理就可以直接用了。图标的设置路径得根据程序的设置位置来定,我这里都是使用相对路径的当前目录。 -
运行结果,因为涉及到界面以及数据,所以运行结果我采用一个最简单的界面进行展示。
四、总结
- 其实我个人还是不建议用PySide2来做界面,因为遇到问题可以查找的资料很少,得不断试错,这考验一个人的解决问题能力。需要不断去尝试锻炼。个人还是建议用主流的PyQt5、或者C++版本的Qt,在工业上项目落地基本都是C++编写的界面,PyQt5的话适合用来科研研发,其实Python就是,因为算法实现方便,很多算法的实现都是用Python,然后再进行C++部署。
- 这是我PySide2打包遇到问题的一个详细总结,因为我找Bug发现资料不多,所以我解决问题之后就打算总结一下,方便后来人的一个问题解决。
- 文章因为篇幅问题存在一些瑕疵,可能这个Bug还有很多的解决思路,如果大家有发现好的链接或者有好的想法都可以评论区留言。
|