芹菜中的导入错误
Posted
技术标签:
【中文标题】芹菜中的导入错误【英文标题】:import error in celery 【发布时间】:2013-11-09 12:28:04 【问题描述】:这是我正在运行的代码:
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
【问题讨论】:
您是否将脚本命名为celery.py
?
发布您的 celery.py
。我怀疑你定义了class Celery(object):
然后将其重命名为另一个,例如celery_test.py
。
通过将文件移动到另一个文件夹,程序运行,....我不知道为什么...
您在旧文件夹中有__init__.py
吗?也许这就是原因?
【参考方案1】:
我也遇到了同样的错误,重命名文件修复了它。
对于遇到此问题的其他人,您遇到此问题的原因是您的本地 celery.py 被导入而不是实际的 celery 包,因此 python 找不到 Celery(capital "C") 的原因,如celery 包中的类,但它确实找到了 celery(lowercase "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
【讨论】:
另外,在重命名或移动文件后,请记住rm *.pyc
,因为 Python 会继续从 celery.pyc 文件中加载错误的 celery 模块。【参考方案2】:
我与 pycharm 和 unittests 一起遇到了这个问题,并想添加一个额外的答案。我已经使用 python 3 对其进行了测试,但假设如果您将 from __future__ import absolute_import
与早期版本一起使用,也会发生同样的情况。
pycharm错误报告https://youtrack.jetbrains.com/issue/PY-15889中描述了根本原因
总结:如果你在pycharm中运行unittests,它总是将包含测试脚本的文件夹添加到sys.path
的beginning。如果你的celery.py
在同一个路径下,python会先尝试加载。
我没有更改文件名,而是通过在我的..._Test.py
测试脚本中导入celery.py
之前从sys.path
中删除此文件夹来解决此问题。
# 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
【讨论】:
【参考方案3】:对于那些在项目目录中重命名 celery.py
文件后仍然遇到此错误的人,只需删除 celery.pyc
文件即可。
【讨论】:
以上是关于芹菜中的导入错误的主要内容,如果未能解决你的问题,请参考以下文章