导入flask.ext触发ModuleNotFoundError的原因排查
解决Flask扩展导入时的ModuleNotFound错误
这个问题我之前踩过坑!核心原因是你用的是Flask旧版本的扩展导入语法,现在已经被官方彻底弃用了,所以才会抛出模块找不到的错误。
具体原因
在Flask 1.0版本之前,官方推荐用flask.ext.xxx的方式导入扩展,但后来为了简化扩展的维护和结构,官方移除了flask.ext这个导入路径,同时也删掉了flask.exthook相关的兼容模块——这就是你遇到ModuleNotFound的直接原因。
正确的解决方法
把旧的导入语句改成直接从扩展的包名导入就行,举几个常见例子:
- 原来的
from flask.ext.sqlalchemy import SQLAlchemy→ 改成from flask_sqlalchemy import SQLAlchemy - 如果是其他扩展,比如Flask-Login:
from flask.ext.login import LoginManager→from flask_login import LoginManager
额外验证步骤
- 确认你安装的是正确的扩展包:比如SQLAlchemy对应的包是
flask-sqlalchemy(注意安装时是短横线,导入时是下划线),可以用pip list命令查看已安装的包,确认存在对应的扩展。 - 如果是旧项目需要临时兼容,可以安装
flask-exthook包,但这只是权宜之计,官方强烈建议直接迁移到新的导入方式,避免后续版本的兼容问题。
内容的提问来源于stack exchange,提问作者Sam Chats
相关产品推荐
相关产品推荐

