芹菜工人错误:ImportError no module named celery

Posted

技术标签:

【中文标题】芹菜工人错误:ImportError no module named celery【英文标题】:Celery Worker Error: ImportError no module named celery 【发布时间】:2013-11-03 19:46:25 【问题描述】:

我在尝试启动 celery worker 时遇到导入错误。我不确定问题是什么。任何帮助将不胜感激。

我的项目:

email/__init__.py
    /celery.py

我尝试通过调用来运行应用程序:

celery worker --app=email

我已经按照这里的所有步骤 - http://docs.celeryproject.org/en/latest/getting-started/next-steps.html#about-the-app-argument

回溯:

File "/Users/.../bin/celery", line 9, in <module>
    load_entry_point('celery==3.0.24', 'console_scripts', 'celery')()
File "/Users/.../lib/python2.7/site-packages/celery/__main__.py, line 14, in main
main()
File "/Users/.../lib/python2.7/site-packages/celery/bin/celery.py", line 957, in main
cmd.execute_from_commandline(argv)
File "/Users/.../lib/python2.7/site-packages/celery/bin/celery.py", line 901, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/Users/.../lib/python2.7/site-packages/celery/bin/base.py", line 185, in execute_from_commandline
argv = self.setup_app_from_commandline(argv)
File "/Users/.../lib/python2.7/site-packages/celery/bin/base.py", line 300, in setup_app_from_commandline
self.app = self.find_app(app)
File "/Users/.../lib/python2.7/site-packages/celery/bin/base.py", line 317, in find_app
return self.find_app('%s.celery:' % (app.replace(':', ''), ))
File "/Users/.../lib/python2.7/site-packages/celery/bin/base.py", line 311, in find_app
sym = self.symbol_by_name(app)
File "/Users/.../lib/python2.7/site-packages/celery/bin/base.py", line 322, in symbol_by_name
return symbol_by_name(name, imp=import_from_cwd)
File "/Users/.../lib/python2.7/site-packages/kombu/utils/__init__.py", line 80, in symbol_by_name
module = imp(module_name, package=package, **kwargs)
File "/Users/.../lib/python2.7/site-packages/celery/utils/imports.py", line 99, in import_from_cwd
return imp(module, package=package)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named celery

这是我的 celery.py

from __future__ import absolute_import

from celery import Celery
from app import mail

celery = Celery('email.celery', 
                broker = 'amqp://guest:guest@localhost:5672//',
                backend = 'amqp://')

if __name__ == '__main__':
    celery.start()

@celery.task
def send_email(nickname, email):
    mail.send(msg) 

【问题讨论】:

将 celery.py 重命名为与 celery 不同的另一个名称,例如 celery_task.py 你能从运行 worker 的同一目录中运行 python -c "from email.celery import celery" 而不会出错吗? 【参考方案1】:

问题是你在说“嘿,兄弟,我听说你喜欢芹菜,吃点芹菜”。

但实际上你应该说,“嘿,兄弟,我听说你安装了 celery,让我们创建一个名称非常相似的文件,这样我们就不会混淆我们的环境”。 p>

将您的 email/celery.py 文件重命名为 email/celery_app.py

然后,当您启动您的工作人员时,请执行以下操作:

celery -A email worker --app=email.celery_app:app --loglevel=info # etc.

关键是您需要在您的文件结构中包含名为celery.py 的文件,但如果您没有,那么您就不能依靠 celery 来查找 celery,所以你必须通过手动指定 --app 来指向它。

【讨论】:

-A 和 --app 是一回事。只需将 -A 与 email.celery_app:app 一起传递即可。 我们必须先激活虚拟环境才能输入上面的命令不是吗?【参考方案2】:

我实际上遇到了类似的问题,假设您关注 Next Steps tutorial 并且我所要做的就是从 proj 上面的目录中运行工作程序,也就是说,假设你当前在 proj 目录运行:

cd ..
celery -A proj worker -l info

它现在对我有用。

【讨论】:

以上是关于芹菜工人错误:ImportError no module named celery的主要内容,如果未能解决你的问题,请参考以下文章

Python、Django mod_wsgi、virtualenv 错误:ImportError: No module named os(路径不正确)

ImportError: No module named django.core.handlers.wsgi in install django mod_wsgi config on apache

芹菜任务应该在工人迷路时排队

启动芹菜工人抛出“无属性'worker_state_db'”

芹菜。运行单个芹菜节拍 + 多个芹菜工人规模

芹菜工人在 aws 弹性豆茎中失败 [退出:芹菜工人(退出状态 1;未预期)]