Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ——循环引用

仔细看项目结构和每个py文件的代码与注释,画图帮助理解,会有直观的理解

解决办法

方法一:
移动import语句的位置(推荐指数:一颗星) 我的例子采用这种方法
将impot放到后面去,放到最后,至少是不依赖这个模块的代码后面。也就是将import语句放到run之后,就不报错了。

方法二:
直接用import来引用(推荐指数:两颗星)
将 from a import b 改成 import a.b ,据说就不会有问题了。

方法三:
设计构架,避免循环引用(推荐指数:三颗星)
尽量避免这种情况。出现这种情况就是代码的布局有问题。对现有的模块就行拆分或者是合并,保证模块尽量独立。
所有的模块最后都有一个层级,不要引用你同级或者高级的模块。

下面是包导入的简图,可以看出app这个python文件夹内出现了一个循环。

Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ------循环引用

项目结构图与运行脚本路径:

Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ------循环引用

Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ------循环引用
from app import app

if __name__ == '__main__':
    app.run(debug=True)

Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ------循环引用

循环引用错误是因为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是完全不同的东西。两者都是纯粹约定俗成的命名,可重命名其他内容。
奇怪:该行代码放到图片代码中第七行会报错?因为会造成循环引用

Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ------循环引用
from app import app  # 从app包中导入 app 这个实例

2个路由
@app.route('/')
@app.route('/index')
1个视图函数
def index():
    return "Hello,World!"   # 返回一个字符串

Original: https://blog.csdn.net/qq_47286790/article/details/120904297
Author: 咕噜一口温开水
Title: Python错误:ImportError: cannot import name ‘app‘ from partially initialized module ‘app‘ ——循环引用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/744541/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球