当前位置: 首页 > 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.hskmm.com/?act=detail&tid=14289

相关文章:

  • flask实现后端接口的封装和开发部分
  • 上海这样的地段简直是逆天
  • 【GitHub每日速递 250923】 Google 又放大招!TimesFM 2.5 参数减半,预测更准更快
  • 具身智能机器人架构:人形机器人系统架构深度拆解
  • 卓驭,欧洲无绝境
  • 下周审核4家IPO,2家再融资。其中两家IPO企业于在审期间调减募资规模
  • 280亿国产AI独角兽,惹怒“地表最强法务部”
  • 读人形机器人20财富再分配
  • Java 与人工智能的深度融合:从数据到推理服务
  • Java 与大数据实时处理:Kafka、Flink 与企业应用
  • Java 与企业级中间件:消息、缓存与数据库集成
  • 基于 Vite7 与 Vue3 的 WebOS 后台系统架构实践
  • 啊哈哈20250923_03:23
  • js获取浏览器指纹
  • gitIgnore 无法忽略dist目录的变更
  • 翻转二叉树
  • 我的第一篇博客
  • 测试测试测试测试测试
  • java中的浮点数计算
  • XYCTF2025复现(WEB)
  • 洛谷 P13973 [VKOSHP 2024] Nightmare Sum
  • 发布/订阅(Publish/Subscribe)与交换机(Exchange)
  • 线性结构之链表
  • 二叉树最近公共祖先
  • AI 编程“效率幻觉”:为何你感觉快了,项目却慢了?
  • lc1033-移动石子直到连续
  • 一些正在制作的“格林达姆”测试项目,以及“假无损”
  • 个人项目
  • 北京 意大利学签 北京意大利签证中心 贵宾 vip vfs
  • 第1周