You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask项目出现循环导入错误,请求排查与解决方案

Flask循环导入引发ImportError问题修复

模块化拆分代码后,运行run.py触发如下错误:

ImportError: 无法从部分初始化的'market'模块导入名称'app'(很可能是由于循环导入)

项目结构

  • 根目录
    • run.py
    • market/
      • init.py
      • routes.py
      • models.py
      • templates/(用于存放HTML模板)

原代码

run.py

from market import app

if __name__ == "__main__":
    app.run(debug=True)

market/init.py

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from market import routes

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///market.db"
db = SQLAlchemy(app)

market/routes.py

from market import app
from flask import render_template
from market.models import Item


@app.route("/")
@app.route("/home")
def home():
    return render_template("index.html")


@app.route("/market")
def market():
    items = Item.query.all()
    return render_template("market.html", items=items)

market/models.py

from market import db


class Item(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(length=30), nullable=False, unique=True)
    price = db.Column(db.Integer(), nullable=False)
    barcode = db.Column(db.String(length=12), nullable=False, unique=True)
    description = db.Column(db.String(length=1024), nullable=False, unique=True)

    def __repr__(self):
        return f"Item {self.name}"

问题原因

循环导入链:run.py导入market.app → market/__init__.py先导入routes → routes.py导入market.app,但此时__init__.py里的app还未完成定义,导致模块初始化不完整,触发错误。

修复方案

调整market/__init__.py的代码顺序,先初始化app和db,再导入routes:

修改后的market/init.py

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

# 先完成app和db的初始化
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///market.db"
db = SQLAlchemy(app)

# 再导入routes,此时app已存在,不会触发循环导入
from market import routes

说明

调整顺序后,当routes模块导入market.app时,app已经在__init__.py中完全定义,循环导入的问题就解决了。其他模块的代码无需修改,models.py依赖的db也已提前初始化,能正常使用。

内容的提问来源于stack exchange,提问作者user17585775

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:33:29