20

这是我正在运行的代码:

from __future__ import absolute_import
from celery import Celery
celery1 = Celery('celery',broker='amqp://',backend='amqp://',include=['tasks'])

celery1.conf.update(
   CELERY_TASK_RESULT_EXPIRES=3600,
       )
if __name__ == '__main__':
 celery1.start()

当我执行上面的代码时,它给了我以下错误:

   ImportError: cannot import name Celery
4

4 回答 4

34

我也遇到了同样的错误并重命名文件修复了它。

对于遇到此问题的其他人,您遇到此问题的原因是您的本地 celery.py 被导入而不是实际的 celery 包,因此 python 找不到 Celery(capital "C") 的原因,如在类中celery 包,但它确实找到了 celery(小写“c”),这是您本地的 celery.py,其中没有定义 Celery 类。

我刚刚将我的本地 celery.py 重命名为 _celery.py,但是除了 celery.py 之外的任何名称都可以解决这个问题。

编辑:我还想提一下,在 celery.py 文件所在的目录之外调用 celery 守护进程也可以。出于测试目的,重命名文件就足够了,但您仍然可以使用 celery.py 作为本地文件名。例如,给定以下文件夹结构:

+根/  
   - 项目/  
     * 芹菜.py  
     *任务.py

如果你从根文件夹调用 celery,你应该可以输入:

celery worker --app=proj [optional args]

您可以使用“-l info”可选日志参数验证您的任务是否存在,并直接查看介绍数据下方的 [tasks] 列表。

更多信息在这里的教程文档中:http: //docs.celeryproject.org/en/latest/getting-started/next-steps.html#about-the-app-argument

于 2013-12-12T16:03:06.380 回答
2

我与 pycharm 和 unittests 一起遇到了这个问题,并想添加一个额外的答案。我已经用 python 3 对其进行了测试,但假设如果你使用from __future__ import absolute_import早期版本也会发生同样的情况。

pycharm 错误报告中描述了根本原因https://youtrack.jetbrains.com/issue/PY-15889

总结:如果你在 pycharm 中运行 unittests,它总是将包含测试脚本的文件夹添加sys.path. 如果您celery.py在同一路径中,python 将首先尝试加载它。

我没有更改文件名,而是通过在sys.path导入测试脚本之前删除此文件夹来解决此问题。celery.py..._Test.py

# If running in pycharm, pycharm always adds the current path to the beginning (!) of sys.path
# I have not found a setting to fix this - so I just remove the path again
# This block can be removed once https://youtrack.jetbrains.com/issue/PY-15889 if fixed
import sys
import os
sys.path.remove(os.path.dirname(__file__)) 

import celery
于 2016-05-28T07:39:11.737 回答
0

如果您在虚拟环境中安装了 Celery,请确保您选择了与该虚拟环境对应的相同 python 解释器。

在 VS Code 中,您可以从此处选择解释器。

视图 - 命令面板 - Python:选择解释器

于 2022-01-31T10:18:57.793 回答
0

对于那些即使在celery.py项目目录中重命名文件后仍然遇到此错误的人,也只需删除该celery.pyc文件即可。

于 2017-10-29T17:41:16.287 回答