【pyinstaller】打包软件中含multiprocess的多进程时遇到的问题

如果使用multiprocess在项目代码里面(没有单独放在main函数里)启动多进程,multiprocess在windows里的启动机制是spawn,会重新走一遍整个代码的main,此时如果是pyqt项目,就会再次实例化一个界面,这不是我们期盼的。通过查阅资料,可以在项目的main函数第一句加上multiprocess.freeze_support()可以解决这个问题,但是尝试了,pyqt项目在启动多进程后直接闪退了,原因不清。

因此需要将启动multiporcess的代码单独放在脚本里,用自己main入口启动,单独打包,与主软件完全隔离。

如果使用pickle文件传参的话,里面的数据结构,例如类的实例等,涉及的module需要在load pickle的时候也导入,不然这些类的实例无法恢复。

pyinstaller是一个将Python脚本打包成可执行文件的工具,而黑框则是指在Windows系统下,使用pyinstaller打包的可执行文件在运行会弹出一个命令行窗口。该黑框现象是由于多进程(multiprocess)的使用导致的。 在Python中,multiprocess模块用于创建和管理多个进程,可以在一个脚本中同运行多个任务。而在使用pyinstaller将包含multiprocess的脚本打包成可执行文件,可能会出现黑框的问题。 原因是,在Windows系统下,pyinstaller默认使用的打包方式是一个单独的可执行文件,而multiprocess模块在Windows系统上需要创建一个新的子进程来运行子进程的工作,而子进程的输出需要通过命令行窗口来显示。 解决这个问题有几种方法: 1. 使用"--noconsole"选项: 在使用pyinstaller打包,可以添加"--noconsole"选项来告诉pyinstaller打包不要包含命令行窗口。这样打包后的可执行文件就不会出现黑框。例如: ``` pyinstaller --noconsole your_script.py ``` 2. 使用"--hidden-import"选项: 如果使用"--noconsole"选项后,程序需要导入一些第三方模块,可以使用"--hidden-import"选项来告诉pyinstaller打包包含这些隐藏的导入模块。例如: ``` pyinstaller --noconsole --hidden-import third_party_module your_script.py ``` 3. 使用其他打包工具: 如果仍然无法解决黑框问题,可以尝试使用其他打包工具,例如cx_Freeze、py2exe等,这些工具在打包可能会有不同的默认设置,可能能够避免黑框问题。 总之,pyinstaller打包包含multiprocess的脚本在Windows系统下出现黑框问题是由于子进程的输出需要通过命令行窗口显示所致,可以通过添加选项或使用其他打包工具来解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值