导入两级时出错

2024-10-01 02:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从下面的包结构导入noun0.routes,但是我得到了ImportError: cannot import name db。为什么我会遇到这个错误,我该如何修复它?在

├── some_rest_api
│   ├── noun0
│   │   ├── __init__.py
│   │   ├── models.py
│   │   ├── routes.py
│   ├── noun1
│   │   ├── __init__.py
│   │   ├── models.py
│   │   ├── routes.py
│   ├── routes.py
│   ├── utils.py
│   └── __init__.py
├── requirements.txt
└── setup.py

some_rest_api/__init__.py

^{pr2}$

some_rest_api/noun0/models.py

from some_rest_api import db

Tags: namepyimportrestapidbinitmodels
1条回答
网友
1楼 · 发布于 2024-10-01 02:21:16

您已经创建了一个循环导入情况。__init__.py导入noun0.routes,它导入{},它试图导入{}。但是,__init__.py还没有达到定义db的程度,它仍在尝试完成导入。在

在路由导入(或其导入链)依赖的所有定义之后移动它们。在

app = Flask(__name__)
db = SQLAlchemy(app)

from some_rest_api.noun0.routes import noun0_api

app.register_blueprint(noun0_api)

This situation is mentioned in the Flask docs at the bottom of this page.


我将您的导入从from noun0.routes更改为from some_rest_api.noun0.routes。您使用的是一种旧的、容易出错的相对导入模式。这个行为在python3中被删除了。最好是使用绝对导入(如我所做的那样),或者对相对导入使用点表示法:from .. import db表示“从我现在的位置上升两个级别。在

相关问题 更多 >