使用pyinstaller打包脚本后运行提示ImportError: No module named decorator错误
报错根因
你遇到的是PyInstaller打包时的隐式依赖遗漏问题:PyInstaller 3.5对Python 2.7的依赖扫描逻辑无法识别traitlets/IPython依赖链里隐式导入的decorator模块,即使本地环境已安装该模块,打包时也不会将其打入最终的exe文件,运行时就会抛出找不到模块的错误。
解决方案
按优先级尝试以下两种方法即可解决:
方法1:打包命令显式指定隐式导入(最快)
直接在原打包命令中添加--hidden-import参数声明要强制导入decorator模块,修改后的命令如下:
pyinstaller --onefile --hidden-import decorator myprogram.py
重新打包后运行exe即可。
方法2:通过spec配置文件指定(适合同类报错多的场景)
如果后续还有多个同类隐式导入报错,可以用spec文件统一配置:
- 先运行一次原打包命令,生成和脚本同名的
myprogram.spec配置文件 - 打开该文件,找到
hiddenimports配置项,将decorator添加到列表中:hiddenimports = ['decorator'] - 基于spec文件重新打包:
pyinstaller myprogram.spec
注意事项
- 打包前确认你当前处于对应的Python 2.7.17虚拟环境中,执行
pyinstaller --version确认调用的是3.5版本的PyInstaller,避免调用到系统其他环境的PyInstaller导致依赖引入错误 - 如果后续再出现其他
ImportError: No module named xxx报错,只要确认本地环境已安装对应模块,都可以用上述两种方法把xxx模块添加到隐式导入列表中解决。
内容的提问来源于stack exchange,提问作者throughalfanoir
相关产品推荐
相关产品推荐

