web-dev-qa-db-ja.com

Celery Worker Error:ImportError no module module named

セロリワーカーを起動しようとすると、インポートエラーが発生します。何が問題なのかわかりません。どんな助けも大歓迎です。

私のプロジェクト:

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

問題は、「ちょっと、セロリにセロリがあるのが好きだと聞いた」と言っていることです。

しかし、本当にあなたは言っているべきです、「ちょっとセロリをインストールしたと聞きました。本当に似たような名前のファイルを作って、環境から混乱しないようにしましょう」。

email/celery.pyファイルの名前をemail/celery_app.pyに変更します

次に、ワーカーを起動したら、次の手順を実行します。

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

重要な点は、ファイル構造にcelery.pyという名前のファイルをnot持つ必要があることですが、必要ない場合は、セロリを見つけるのにセロリに頼ることができないので、手動で--appを指定してセロリを指す必要があります。

44
Michael W.

次のステップのチュートリアル に従っていると仮定すると、実際には同様の問題が発生し、問題を解決するために必要なことは、上記のディレクトリからワーカーを実行することだけでした proj、つまり、現在projディレクトリにいると仮定すると、次のコマンドが実行されます。

cd ..
celery -A proj worker -l info

今私のために働いています。

21
Mark