部署Flask应用至Heroku时报错:No module named 'importlib.util'
报错核心原因
requirements.txt中的importlib==1.0.4条目是直接诱因。importlib是Python 3.1+内置标准库,无需额外安装。该第三方包是Python 2时代的兼容backport,已停止多年维护,本身未包含importlib.util子模块(该子模块为Python 3.4+内置新增功能)。- 安装该包后会覆盖系统内置的
importlib模块,而Heroku的heroku/python构建包默认使用Python 3.7+环境,原本内置的importlib.util模块被旧包覆盖后,代码调用时就会触发ModuleNotFoundError。
修复操作步骤
- 编辑项目根目录下的
requirements.txt,删除importlib==1.0.4整条记录。 - 清理冗余无效依赖:
- 删除
sklearn==0.0条目:该包为空占位包,项目已安装正式的scikit-learn==0.24.1,该条目无实际作用,还可能引发依赖冲突。 - 若代码中未显式引用
pprintpp的相关功能,可同步删除pprintpp==0.4.0条目。
- 删除
- 本地执行
pip install -r requirements.txt验证依赖安装无报错。 - 重新提交代码触发Heroku自动部署流程。
长期优化建议
- 不要直接将本地执行
pip freeze生成的全量依赖清单上传至生产环境,该清单会包含本地全局环境的所有包版本,极易引入无关冗余依赖。建议手动维护requirements.txt,仅列出项目实际import用到的第三方包。 - 若需使用
importlib相关功能,直接调用Python内置模块即可,无需额外安装第三方包。
内容的提问来源于stack exchange,提问作者ianwt
相关产品推荐
相关产品推荐

