Python 项目逐渐增大,循环导入时,一不留神可能碰到错误:
ImportError: cannot import name ‘’
出现此问题一般是因为在导入模块时顺序上了问题
看如下例子:./test ├── main.py ├── sub_a.py ├── sub_b.py
# main.pyfrom sub_a import xprint(x + 1)
# sub_a.pyfrom sub_b import ba = 1x = a + bprint(x)
# sub_b.pyfrom sub_a import ab = a + 1
运行:
python module_a.py
Traceback (most recent call last): File ".\main.py", line 1, infrom sub_a import x File "~\test\sub_a.py", line 1, in from sub_b import b File "~\test\sub_b.py", line 1, in from sub_a import aImportError: cannot import name 'a'
由main.py
进入sub_a.py
中执行from sub_b import b
语句,在这里程序进入sub_b.py
中执行,'sub_a.py'程序暂停执行,此时需要在sub_b.py
使用的sub_a.py
中的 a = 1
变量还没有生成,因此出现了上述错误。
要避免错误,要保证在导入模块中内容时,此内容在程序执行到此处时已定义。
module_a.py
改为:
a = 1from sub_b import bx = a + b
Flask 中的实际示例:
# app.pyfrom flask_mongoengine import MongoEngine# 导入from .views.main import main as main_blueprint# 定义db = MongoEngine()# 使用app.register_blueprint(main_blueprint)
# views.main.py# 导入from user import User# 使用Users.objects()
# users.py# 导入from app import db # 使用class Users(db.Document): id = db.StringField(primary_key=True) name = db.StringField(required=True)
app.py
文件改为:
# app.pyfrom flask_mongoengine import MongoEngine# 定义db = MongoEngine()# 导入from .views.main import main as main_blueprint# 使用app.register_blueprint(main_blueprint)