Flask debug模式启动报错:AttributeError: module '__main__'无__package__属性
解决Flask Debug模式在Spyder中启动崩溃的问题
你遇到的AttributeError: module '__main__' has no attribute '__package__'错误,根源在于Spyder IDE的runfile执行机制——它在运行脚本时没有给__main__模块设置__package__属性,而Flask依赖的Werkzeug重载器在重启应用时恰好需要这个属性来定位你的应用包结构。
下面是几个可行的解决方案:
方案1:手动设置__package__属性(最适配Spyder)
在你的启动文件(wsgi.py)中,在启动应用前手动指定应用的包名,让重载器能正确识别结构:
from application import create_app app = create_app() if __name__ == "__main__": # 手动设置包名,对应你的application包 __package__ = "application" app.run(host='0.0.0.0')
修改后再启动,Debug模式的自动重载就能正常工作了。
方案2:临时关闭自动重载
如果你暂时不需要代码修改后的自动重启功能,可以直接关闭重载器:
from application import create_app app = create_app() if __name__ == "__main__": app.run(host='0.0.0.0', use_reloader=False)
这种方式能快速绕过报错,但每次修改代码后都需要手动重启应用。
方案3:用命令行启动(推荐的标准方式)
Spyder的runfile执行方式容易引发这类环境兼容问题,更推荐直接在终端进入项目根目录,用标准命令启动:
python wsgi.py
这种方式下Python会自动正确设置__package__属性,Debug模式的所有功能都能正常运行。
额外小提示
关于你配置的.env文件,确保在create_app函数开头主动加载它(虽然这不是当前报错的原因,但能保证环境变量生效):
from flask import Flask from flask_sqlalchemy import SQLAlchemy from dotenv import load_dotenv import os db = SQLAlchemy() def create_app(): # 加载.env文件中的环境变量 load_dotenv() app = Flask(__name__, instance_relative_config=False) app.config.from_object('config.DevConfig') db.init_app(app) with app.app_context(): from . import routes db.create_all() return app
内容的提问来源于stack exchange,提问作者demo
相关产品推荐
相关产品推荐

