web-dev-qa-db-fra.com

Celer Worker Error: ImportError aucun module nommé celery

Je reçois une erreur d'importation lorsque j'essaie de démarrer mon travailleur de céleri. Je ne sais pas quel est le problème. Toute aide serait très appréciée.

Mon projet:

email/__init__.py
    /celery.py

J'essaie d'exécuter l'application en appelant:

celery worker --app=email

J'ai suivi toutes les étapes ici - http://docs.celryproject.org/en/latest/getting-started/next-steps.html#about-the-app-argument

Le retraçage:

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

Voici mon 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) 
25
user2216194

Le problème est que vous dites "hé frère j'ai entendu que vous aimiez le céleri avoir du céleri".

Mais vraiment, vous devriez dire: "hé frère, j'ai entendu que vous avez installé céleri, permet de créer un fichier nommé quelque chose de vraiment similaire afin de ne pas confondre l'enfer de notre environnement".

Renommez votre email/celery.py fichier vers email/celery_app.py

Ensuite, lorsque vous démarrez votre travailleur, procédez comme suit:

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

La clé est que vous devez pas avoir le fichier nommé celery.py dans votre structure de fichiers, mais si vous ne le faites pas, vous ne pouvez pas compter sur le céleri pour trouver le céleri, vous devez donc le pointer en spécifiant --app manuellement.

44
Michael W.

J'avais en fait un problème similaire, en supposant que vous suiviez le tutoriel des étapes suivantes et que tout ce que j'avais à faire pour résoudre le problème était d'exécuter le travailleur à partir du répertoire ci-dessus proj , c'est-à-dire en supposant que vous êtes actuellement dans le répertoire proj exécuté:

cd ..
celery -A proj worker -l info

Ça marche pour moi maintenant.

21
Mark