Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ------循环引用
项目结构图与运行脚本路径:代码:from app import appif __name__ == '__main__':app.run(debug=True)from flask import Flask# 从flask包中导入Flask类app = Flask(__name__)# 将Flask类的实例 赋值给名为 app 的变量。这个实例成为app包的成员。# print('等会谁(哪个包或
·
仔细看项目结构和每个py文件的代码与注释,画图帮助理解,会有直观的理解
解决办法
方法一:
移动import语句的位置(推荐指数:一颗星)我的例子采用这种方法
将impot放到后面去,放到最后,至少是不依赖这个模块的代码后面。也就是将import语句放到run之后,就不报错了。
方法二:
直接用import来引用(推荐指数:两颗星)
将 from a import b 改成 import a.b ,据说就不会有问题了。
方法三:
设计构架,避免循环引用(推荐指数:三颗星)
尽量避免这种情况。出现这种情况就是代码的布局有问题。对现有的模块就行拆分或者是合并,保证模块尽量独立。
所有的模块最后都有一个层级,不要引用你同级或者高级的模块。
下面是包导入的简图,可以看出app这个python文件夹内出现了一个循环。
项目结构图与运行脚本路径:
代码:
from app import app
if __name__ == '__main__':
app.run(debug=True)
循环引用错误是因为from app import routes这一句放在了app = Flask(__name__) 前面
from flask import Flask # 从flask包中导入Flask类
app = Flask(__name__) # 将Flask类的实例 赋值给名为 app 的变量。这个实例成为app包的成员。
# print('等会谁(哪个包或模块)在使用我:', __name__)
from app import routes # 从app包中导入模块routes
# 注:上面两个app是完全不同的东西。两者都是纯粹约定俗成的命名,可重命名其他内容。
# 奇怪:该行代码放到图片代码中第七行会报错?因为会造成循环引用
from app import app # 从app包中导入 app 这个实例 # 2个路由 @app.route('/') @app.route('/index') # 1个视图函数 def index(): return "Hello,World!" # 返回一个字符串
更多推荐
已为社区贡献1条内容
所有评论(0)