使用PyInstaller打包Python教育脚本生成.exe时遇源码获取错误求助
解决PyInstaller打包含inflect库脚本时的"could not get source code"错误
问题根源
你的脚本在PyCharm中正常运行,但打包成单文件exe后报错,是因为inflect依赖的typeguard库在初始化时会调用inspect.getsource()获取源码做类型验证。而PyInstaller的--onefile模式会把所有代码打包成字节码,运行时解压到临时目录,没有保留原始.py源文件,导致inspect模块无法获取源码,抛出异常。
解决方案
以下是几种可行的解决方法,按优先级尝试:
方法1:打包时收集inflect的所有依赖文件
修改PyInstaller命令,添加--collect-all inflect参数,确保inflect及其关联的typeguard相关文件都被完整打包:pyinstaller --onefile -w --collect-all inflect main.py方法2:禁用typeguard的运行时类型检查
在脚本最开头、导入inflect之前,添加环境变量禁用typeguard的检查,跳过源码获取步骤:import os os.environ["TYPEGUARD_DISABLE"] = "1" # 之后再导入inflect等库 import inflect import tkinter as tk import num2words方法3:降级inflect版本
部分新版本inflect对typeguard的依赖更严格,尝试降级到5.6.0版本(该版本未引入导致此问题的typeguard逻辑):pip install inflect==5.6.0之后重新打包即可。
内容的提问来源于stack exchange,提问作者Gabo Walker
相关产品推荐
相关产品推荐

