当前位置: 首页 > news >正文

遇到一件循环导入事件

遇到一件循环导入事件

#pythonProject1\api\__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from api.config.config import Config_dict
from api.modules.auth import auth_blu
app.register_blueprint(auth_blu)db = SQLAlchemy()
def create_app(config_name):app = Flask(__name__)config = Config_dict.get(config_name)app.config.from_object(config)db.init_app(app)return app
#\pythonProject1\api\modules\auth\__init__.py
from flask import Blueprint
from flask_restful import Api# 创建蓝图
auth_blu = Blueprint('auth', __name__, url_prefix='/auth')# 创建api对象
api = Api(auth_blu)from api.modules.auth.login import LoginView# 添加资源到api中(注册路由)
api.add_resource(LoginView, '/login')
#pythonProject1\api\modules\auth\login.py
from flask import current_app
from flask_restful import Resource, reqparse,inputs
from api.models.user import UserLogin
from api.utils.auth_helper import Auth
from api.utils.response_utils import error,HttpCode
pythonProject1/
├── app.py                          # 应用入口文件
├── api/                           # API包
│   ├── __init__.py               # 包初始化文件(包含create_app函数)
│   ├── extensions.py             # 扩展文件(推荐创建)
│   ├── config/                   # 配置目录
│   │   ├── __init__.py
│   │   └── config.py             # 配置文件(包含Config_dict)
│   ├── models/                   # 数据模型目录
│   │   ├── __init__.py
│   │   ├── base.py               # 基础模型(BaseModels)
│   │   └── user.py               # 用户模型(UserLogin)
│   ├── modules/                  # 模块目录
│   │   └── auth/                 # 认证模块
│   │       ├── __init__.py       # 认证模块初始化(创建auth_blu蓝图)
│   │       └── login.py          # 登录视图(LoginView)
│   └── utils/                    # 工具类目录
│       ├── __init__.py
│       ├── auth_helper.py        # 认证工具类(Auth)
│       └── response_utils.py     # 响应工具(error, HttpCode)
└── requirements.txt              # 依赖文件(可选)

解析

api/__init__.py 中:

from api.modules.auth import auth_blu  # 在函数外导入
app.register_blueprint(auth_blu)  # 这行会报错,因为app还没创建

这会导致:

  1. 导入 auth_blu 时,会执行 api/modules/auth/__init__.py
  2. api/modules/auth/__init__.py 中导入 LoginView
  3. LoginView 导入 AuthUserLogin
  4. 这些模块又间接导入了 api 中的内容,就会形成循环

循环过程

app.py↓
api/__init__.py (执行到第4行)↓  
api/modules/auth/__init__.py↓
api/modules/auth/login.py  ↓
api/models/user.py↓
api/__init__.py (再次尝试导入,但未完成) ← 循环形成!

关键节点

# api/modules/auth/__init__.py
from flask import Blueprint
from flask_restful import Apiauth_blu = Blueprint('auth', __name__, url_prefix='/auth')
api = Api(auth_blu)from api.modules.auth.login import LoginView  # ⚠️ 继续导入# api/modules/auth/login.py
from flask import current_app
from flask_restful import Resource, reqparse
from api.models.user import UserLogin        # ⚠️ 导入模型
from api.utils.auth_helper import Auth       # ✅ 正常导入
from api.utils.response_utils import error, HttpCode  # ✅ 正常导入# api/models/user.py
from api import db  # ⚠️ 循环导入开始!
# 或者从 base.py 导入,base.py 中也有 from api import db

此时Python解释器发现:

  • api/init.py 正在初始化(只执行了一半)
  • 但 user.py 又试图导入 api 包中的 db 对象
  • 由于 api/init.py 还没完全执行完,db 可能还未定义
  • 形成循环依赖!
http://www.gsyq.cn/news/10023.html

相关文章:

  • 上海这样的地段简直是逆天
  • 【GitHub每日速递 250923】 Google 又放大招!TimesFM 2.5 参数减半,预测更准更快
  • 具身智能机器人架构:人形机器人系统架构深度拆解
  • 卓驭,欧洲无绝境
  • 下周审核4家IPO,2家再融资。其中两家IPO企业于在审期间调减募资规模
  • Java 与大数据实时处理:Kafka、Flink 与企业应用
  • Java 与企业级中间件:消息、缓存与数据库集成
  • 测试测试测试测试测试
  • 一些正在制作的“格林达姆”测试项目,以及“假无损”
  • 九月22号
  • 25.9.22 继续MySQL
  • 开机RAM分析调试SOP
  • 2025.9.21 测试 (a1a2a3a4a5)
  • 基于Hex Editor Neo的二进制文件模板
  • 【F#学习】字符
  • kubebuilder创建Operator示例
  • 集训总结(八)
  • x6831卡顿分析
  • 实测对比:权威榜单之微信排版软件Top5(含详细测评)
  • C++中std::map容器中元素删除方法汇总 - 详解
  • 9.22 科研小结:不要总是预设成功,失败才是常态
  • 多模态算法QwenVL、KimiVL等算法原理 - Big-Yellow
  • 从用户态到内核态:Windows CC 技术深度解析(第一篇:DNS隧道)
  • github操作备忘录
  • 算法人生
  • 动态规划专题
  • 每日反思(2025.9.22)
  • 洛谷题单指南-进阶数论-P4942 小凯的数字
  • 三门问题的多种解法,总有一个你看得懂
  • 详细介绍:无公网 IP 访问群晖 NAS:神卓 N600 的安全解决方案(附其他方法风险对比)