cannot import name ‘x‘ from partially initialized module ‘x‘ (most likely due to a circular import)

问题

在使用flask+celery+blueprint时,总是报重复引入circular import
cannot import name ‘create_app’ from partially initialized module ‘app’ (most likely due to a circular import

解决方案

修改import的位置

  • 修改前import在文件的最上面:
from xx.views import xx_blueprint # 注意import位置

def register_blueprints(app):
    app.register_blueprint(xx_blueprint)
  • 修改后import在注册函数中:
def register_blueprints(app):
    from xx.views import xx_blueprint # 注意import位置
    app.register_blueprint(xx_blueprint)

把所有blueprint的引用放在注册函数中即可。

原因分析

一般在blueprint模块的view中会引入celery模块使用delay函数等,在创建flask模块时修改前会import blueprint模块,然后引入celery模块,但celery模块又依赖于flask模块。

修改后,blueprint模块在register_blueprints中引入,这时flask的app模块已经创建好了,就不会有重复引入的问题。

欢迎关注

人工智能技术分析
人工智能 机器学习 深度学习
AI人工智能三要素:数据、算力和算法
计算机视觉(CV)任务介绍:分类、检测、分割、超分、关键点识别、图像生成、度量学习

公众号持续更新原创内容,欢迎订阅。

AI人工智能与大数据
Alt

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值