【问题标题】:ImportError cannot import name celeryImportError 无法导入名称 celery
【发布时间】:2019-08-01 20:25:28
【问题描述】:

我正在尝试将 Celery 添加到我现有的 Flask 应用程序之上,我在下面分享了我的项目文件结构。我的项目中没有__init__.py 文件。

我在 jobs.py 有任务 run_job ,但是从 app.py 我无法导入我创建的 celery 对象。但我收到以下错误。我相信由于我的项目结构并且没有初始化文件而出现错误。有没有办法在不使用__init__.py

的情况下解决这个问题

ImportError: cannot import name 'celery'

<pre>+ root/  
  - flask-app/  
    * app.py  
    * tasks.py
    * jobs.py
    * jobs_namespace.py</pre>

我的 app.py 看起来像:

from flask import Flask
from tasks import make_celery

APP = Flask(__name__)
...
celery = make_celery(APP) # cannot import in jobs.py 

我的任务.py:

from celery import Celery
def make_celery(app):
...

我的工作.py

from app import celery
@celery.task()
def run_job():
...

我的jobs_namescape.py:

@api.route("/")
def home():
   result = jobs.run_job().apply_async(args=None, countdown=60)

【问题讨论】:

  • app.py 中,您命名了一个变量celery,这可能会导致问题?不确定。
  • @Poojan 该变量存储Celery 对象我正在尝试导入该变量
  • 您是否尝试重命名变量 celery?如果这不是问题,可以在导入 celery 之前尝试在 jobs.py 中使用 sys.path.append("path/to/current/directory") 将当前目录添加到路径?

标签: python flask celery


【解决方案1】:

您要么export PYTHONPATH=/path/to/your/project/root:$PYTHONPATH,然后重试,要么修改代码为from .app import celery。我谦虚地相信您为该变量选择了一个糟糕的名称。 celery_app 或不与同名 Celery 模块冲突的类似内容会更有意义。

【讨论】:

  • 我确实更新了变量名并设置了 PYTHONPATH,但现在从 .app import celery_app ImportError 获取了 `:尝试使用没有已知父包的相对导入 `
  • 如果你使用PYTHONPATH,你不需要from .app,你经常使用它(from app
  • 当时我得到ImportError: cannot import name celery_appapp.py 中,当我查看celery_app 的类型时,输出是
  • 您是否真的修改了您的 app.py 以使用 celery_app 变量而不是 celery
  • celery = Celery( 修改为celery_app = Celery( 并在周围使用该引用...您遇到的问题与Celery 无关-这是一个典型的Python 导入问题和混乱的名称.. .
猜你喜欢
  • 2021-03-08
  • 2022-10-19
  • 1970-01-01
  • 2020-10-10
  • 2013-11-24
  • 1970-01-01
  • 2016-03-31
  • 2014-10-10
  • 2014-09-20
相关资源
最近更新 更多