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

VSCode格式化调整import顺序导致Flask的__init__.py出现循环导入如何解决

解决方案

方案1:给后置导入语句添加格式化忽略标记

常用Python格式化工具均支持单行/区域跳过规则,你只需给需要保留后置位置的导入行添加对应标记即可:

  • 若使用isort:在导入行末尾添加# isort:skip
  • 若使用black:在导入行末尾添加# fmt: skip
  • 若使用VSCode默认的autopep8:在导入行末尾添加# noqa
    修改后的代码示例如下:
from flask import Flask
app = Flask(__name__)
from .config import Config
app.config.from_object(Config)
from app import routes  # isort:skip fmt:skip noqa

添加标记后所有格式化工具都会跳过调整这一行的位置,不会打乱导入顺序触发循环导入。

方案2:配置格式化工具的全局排序规则

你可以在项目根目录添加格式化工具的配置文件,把Flask应用初始化后的导入排除在自动排序范围之外,以isort为例,在项目根目录的pyproject.toml中添加如下配置即可:

[tool.isort]
known_first_party = ["app"]
force_sort_within_sections = true
sections = ["FUTURE", "STDLIB", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER", "APPLICATION"]

方案3:改用应用工厂模式从根源避免循环导入

这是长期最优解,直接调整为Flask官方推荐的应用工厂结构,完全规避循环导入风险,同时所有导入语句都符合PEP8规范,格式化工具怎么调整都不会出错,代码结构示例:

# __init__.py
from flask import Flask
from .config import Config

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)
    
    # 应用实例初始化完成后再导入路由
    from app.routes import bp as routes_bp
    app.register_blueprint(routes_bp)
    
    return app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:45:05