我正在尝试从以下包结构中导入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
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from noun0.routes import noun0_api
app = Flask(__name__)
db = SQLAlchemy(app)
app.register_blueprint(noun0_api)
some_rest_api/noun0/models.py
from some_rest_api import db
答案 0 :(得分:2)
您已创建循环导入情况。 __init__.py
导入noun0.routes
,导入noun0.models
,尝试导入db
。但是,__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
。您正在使用旧的,容易出错的相对导入模式。在Python 3中删除了这种行为。最好使用绝对导入(就像我一样),或者使用点表示法进行相对导入:from .. import db
说“从我的位置上升两级。