Ошибка производителя сельдерея: ImportError нет модуля с названием сельдерей
Я получаю ошибку импорта, когда пытаюсь начать работу с сельдерием. Я не уверен, в чем проблема. Любая помощь будет высоко оценен.
Мой проект:
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:[email protected]:5672//',
backend = 'amqp://')
if __name__ == '__main__':
celery.start()
@celery.task
def send_email(nickname, email):
mail.send(msg)
Ответы
Ответ 1
Проблема в том, что вы говорите "эй, брат, я слышал, что ты любил сельдерей иметь сельдерей".
Но на самом деле вы должны сказать: "Эй, брат, я слышал, что вы установили сельдерей, давайте сделаем файл с именем что-то действительно похожее, чтобы мы не путали ад из нашей среды".
Переименуйте файл email/celery.py
в email/celery_app.py
Затем, когда вы запустите своего работника, сделайте следующее:
celery -A email worker --app=email.celery_app:app --loglevel=info # etc.
Ключ в том, что вам не нужно иметь файл с именем celery.py
в вашей файловой структуре, но если вы этого не сделаете, вы не можете полагаться на сельдерей, чтобы найти сельдерей, поэтому вам нужно указать его на указав --app вручную.
Ответ 2
У меня была аналогичная проблема, предполагая, что вы следуете Руководство по следующим шагам, и все, что я должен был сделать, чтобы решить проблему, было выполнено рабочий из каталога выше proj, то есть если вы в настоящий момент находитесь в каталоге proj:
cd ..
celery -A proj worker -l info
Теперь он работает для меня.