Python Flask REST API循环导入问题求助:ImportError报错排查
Flask循环导入错误的解决方法
你碰到的ImportError是循环导入导致的——你的代码结构里存在模块互相依赖的死循环:
server/server.py在创建app实例之前就导入了controllers.calendar- 而
controllers/calendar.py又试图从server.server导入还没创建完成的app
Python加载模块时,后导入的模块会发现前一个模块还没完全初始化,于是抛出这个错误。
修复方案1:调整导入顺序(快速解决)
修改server/server.py的代码,先创建Flask实例,再导入控制器:
from flask import Flask # 先完成app实例的创建 app = Flask(__name__) # 此时app已经存在,再导入控制器模块 from controllers.calendar import *
修复方案2:使用蓝图Blueprint(规范REST API结构)
如果后续要扩展更多接口,用蓝图是更专业的做法,能从根源避免循环导入:
- 修改
controllers/calendar.py,用蓝图定义路由:
from flask import Blueprint # 创建蓝图对象 calendar_bp = Blueprint('calendar', __name__) # 用蓝图定义路由,不再直接依赖app @calendar_bp.route('/calendar', methods=['GET']) def get_calendar(): return {"status": "success", "data": "Calendar content"}
- 修改
server/server.py,注册蓝图:
from flask import Flask from controllers.calendar import calendar_bp app = Flask(__name__) # 注册蓝图到app app.register_blueprint(calendar_bp)
确认main.py的结构
保持main.py的导入和运行逻辑正确即可:
from server.server import app from Config.config import host, port, debug if __name__ == '__main__': app.run(host=host, port=port, debug=debug)
内容的提问来源于stack exchange,提问作者Manish Parab
相关产品推荐
相关产品推荐

