Ошибка Celery Worker: ImportError нет модуля с именем celery

Я получаю сообщение об ошибке импорта, когда пытаюсь запустить своего сельдерея. Я не уверен, в чем проблема. Любая помощь будет высоко оценен.

Мой проект:

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) 

person user2216194    schedule 24.10.2013    source источник
comment
Переименуйте celery.py в другое имя, отличное от celery, скажем, celery_task.py.   -  person Leon Young    schedule 25.10.2013
comment
Можете ли вы запустить python -c "from email.celery import celery" из того же каталога, в котором вы запускаете рабочий процесс, без ошибок?   -  person Lycha    schedule 29.10.2013


Ответы (2)


Проблема в том, что вы говорите: «Привет, братан, я слышал, что тебе нравится сельдерей, ешь сельдерей».

Но на самом деле вы должны сказать: «Эй, братан, я слышал, что ты установил celery, давай создадим файл с каким-то действительно похожим именем, чтобы мы не запутались в нашей среде».

Переименуйте файл email/celery.py в email/celery_app.py.

Затем, когда вы запускаете своего рабочего, сделайте следующее:

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

Суть в том, что вам нужно не иметь файл с именем celery.py в вашей файловой структуре, но если вы этого не сделаете, то вы не можете полагаться на celery для поиска celery, поэтому вам нужно указать это, указав --app вручную.

person Michael W.    schedule 11.01.2014
comment
-A и --app это одно и то же. Просто передача -A с email.celery_app:app делает работу. - person Amit Tripathi; 16.07.2017
comment
мы должны сначала активировать виртуальную среду, прежде чем вводить вышеуказанную команду, не так ли? - person doyz; 03.08.2018

На самом деле у меня была аналогичная проблема, если вы следовали Учебник "Следующие шаги", и все, что мне нужно было сделать, чтобы решить эту проблему, это запустить рабочий процесс из каталога выше proj, то есть предполагая, что вы в данный момент находитесь в proj запуск каталога:

cd ..
celery -A proj worker -l info

Это работает для меня сейчас.

person Mark    schedule 14.08.2014