pyinstaller 打包含有多进程代码的程序问题


pyinstaller 基本操作:

pyinstaller -w KingDeePTE.py -i staticfiles\kdicon.ico --workpath ..\project\build --distpath ..\project\dist --clean
其中:

  • -w :作用是运行打包好的文件时,不弹出黑色命令行窗口
  • --workpath:作用是用于存放打包过程中产生的临时文件
  • --distpath:作用是可执行文件的存放路径
  • -i:后面跟的是图标所在路径
  • clean:作用是清除缓存

今天下午第N次尝试对pdf转excel程序进行了打包操作。结果依旧不尽如人意,点击exe文件后还是只弹出了黑色的命令行窗口(当时我打包时并没有添加-w来取消命令行窗口的弹出,为的是查看是否会报错),而且,打开任务管理器的时候看到内存占用直接飙到了80%多,并还在增长,我不得不怀疑自己是不是开发了一个蠕虫病毒出来(┭┮﹏┭┮)。在长时间质疑自己代码是不是存有问题无果之后,我决定把矛头对准了pyinstaller这个工具库,我的直觉告诉我,绝对是这厮在搞事情。然而,我一直无法查到解决方案,倒不是网上没有,而是我根本就不知道问题是什么,多进程最大的坏处就是无法捕捉其漏洞在哪里。正当我苦恼的时候,工友过来和我谈论,我把问题告知了他,虽然在python库方面他并不是很懂,但是谈话中有一点提醒了我,工友提到了递归和多进程。我当时就想会不会是代码里的多进程和pyinstaller产生了矛盾,因为任务管理器里面看到的景象根源是多进程自己打开自己。带着这个思路,我去网上查询了问题,果然还真有人问了并且提供了解决方案,以下就是解决方案。


解决方案:

在windows上Pyinstaller打包多进程程序需要添加特殊指令。
这里是官方github给出的解释:
https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing

修改方式比较简单,在if __name__=='__main__:'下添加一句multiprocessing.freeze_support()即可。

if __name__=='__main__':
    # 在此处添加
    multiprocessing.freeze_support()
    # 这里是你的代码
    # ......

跟着作者的意思,我在代码里面的主函数里面添加了这一句,问题迎刃而解。

提供解决思路的文章路径:https://blog.csdn.net/zyc121561/article/details/82941056

你可能感兴趣的:(pyinstaller 打包含有多进程代码的程序问题)