Win7下用PyInstaller打包PyQt5程序为EXE运行报错:Failed to execute script pyi_rth_multiprocessing
解决Windows7下PyInstaller打包PyQt5程序报错“Failed to execute script pyi_rth_multiprocessing”
这个报错我在帮别人调试Win7下的PyQt5打包程序时碰到过好多次,大概率是multiprocessing的配置或者PyInstaller打包参数没弄对,给你几个靠谱的解决步骤:
检查代码的multiprocessing使用规范
Windows系统没有Linux的fork机制,multiprocessing启动子进程时需要重新导入整个模块,所以你的主程序入口必须用if __name__ == '__main__':包裹,而且要加上multiprocessing.freeze_support(),这行代码必须放在任何multiprocessing相关操作之前。示例代码结构如下:import sys from PyQt5.QtWidgets import QApplication, QMainWindow import multiprocessing def worker_task(): # 这里写你的子进程逻辑 pass if __name__ == '__main__': # 关键:Windows下必须先调用这个方法 multiprocessing.freeze_support() app = QApplication(sys.argv) main_window = QMainWindow() main_window.show() # 启动子进程的代码必须放在这个代码块里 worker_process = multiprocessing.Process(target=worker_task) worker_process.start() sys.exit(app.exec_())调整PyInstaller的打包参数
有时候PyInstaller会漏掉multiprocessing的相关依赖,打包时需要手动指定隐藏导入。试试用下面的命令打包:# 单文件打包,带控制台 pyinstaller --onefile --hidden-import=multiprocessing your_main_script.py # 如果是无控制台的窗口程序,加上--windowed参数 pyinstaller --onefile --windowed --hidden-import=multiprocessing your_main_script.py降级PyInstaller版本
较新的PyInstaller版本(比如4.x及以上)对Windows7的兼容性不太友好,建议降级到对Win7支持更完善的3.6版本:pip uninstall pyinstaller -y pip install pyinstaller==3.6检查Python版本兼容性
Windows7对Python 3.9及以上版本的支持有限,如果你用的是高版本Python,建议换成Python 3.7或3.8,这两个版本在Win7上运行更稳定,打包后的程序也不容易出问题。
如果以上步骤都试过还是不行,可以尝试不用--onefile参数打包成文件夹模式,有时候单文件打包会导致某些依赖加载异常。
内容的提问来源于stack exchange,提问作者Chans
相关产品推荐
相关产品推荐

