为什么PyInstaller在特定系统下打包的.exe文件启动时持续崩溃?
问题根本原因
你使用的是Python 3.9版本,Python 3.5及以上版本已将typing模块纳入官方标准库,出问题的设备中额外安装了第三方旧版typing包,和标准库的typing模块发生冲突,直接引发了AttributeError: type object 'Callable' has no attribute '_abc_registry'报错。同时两台设备的PyInstaller版本不一致,出问题的设备使用的是旧版PyInstaller,也会导致打包兼容性问题,你观察到的参数差异就是版本不一致导致的。
解决步骤
第一步:卸载第三方冗余typing包
打开命令提示符执行以下命令:pip uninstall typing -y
卸载完成后可以检查f:\installed program files\python\python 39\lib\site-packages\路径下是否还有typing相关的残留文件,有就手动删除,zope相关的报错是typing冲突引发的,无需单独处理,卸载typing后会自动恢复正常。第二步:升级PyInstaller到最新稳定版,和正常打包的设备版本保持一致
执行命令:pip install --upgrade pyinstaller
升级完成后你可以查看PyInstaller的参数列表,会和正常设备的支持参数一致。第三步:清理旧打包缓存
删除你项目目录下的build、dist文件夹,以及后缀为.spec的打包配置文件,避免旧缓存影响新的打包结果。第四步:重新执行PyQt5专属打包命令
PyQt5是GUI程序,打包时建议加上--windowed参数避免运行exe时弹出多余控制台窗口,命令如下:pyinstaller --onefile --windowed myfile.py
如果还有依赖缺失的报错,可以额外加--hidden-import PyQt5参数指定隐式导入PyQt5相关依赖。
内容的提问来源于stack exchange,提问作者CCCC

