2016-09-14 4 views
0

セロリのチュートリアルに従っていますが、このエラーが発生しました。 'src'という名前のモジュールはありません。私は問題が何であるか理解していません。セロリチュートリアルの後にこのエラーが発生しました 'src'というモジュールがありません

これは私も

from __future__ import absolute_import 
import sys 
sys.path.insert(0, "/project/src/") 
from proj.celery import app 
をしようとした私のディレクトリ構造

venv/ 
    src/ 
    __init__.py 
    celery.py 
    manage.py 
    tasks.py 

私celery.py

from __future__ import absolute_import 
    from .gettingstarted.settings.local import BROKER_URL 
    from celery import Celery 

    app = Celery('src', 
       broker=BROKER_URL, 
       backend=BROKER_URL, 
       include=['src.tasks']) 

    # Optional configuration, see the application user guide. 
    app.conf.update(
     CELERY_TASK_RESULT_EXPIRES=3600, 
    ) 

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

私tasks.pyファイル

from __future__ import absolute_import 

    from proj.celery import app 


    @app.task 
    def add(x, y): 
     return x + y 


    @app.task 
    def mul(x, y): 
     return x * y 


    @app.task 
    def xsum(numbers): 
     return sum(numbers) 

です

そのどちらもできませんでした。

srcディレクトリと実行のpythonシェルigetがに

私が行くfollwoingエラー

No module named 'src' 

私の誤動作は何ですか?

EDIT

マイトレースバック

(practice) apples-MBP:src ray$ celery worker -A tasks -l info 
Traceback (most recent call last): 
    File "/Users/ray/Desktop/myheroku/practice/bin/celery", line 11, in <module> 
    sys.exit(main()) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/__main__.py", line 30, in main 
    main() 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/bin/celery.py", line 81, in main 
    cmd.execute_from_commandline(argv) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/bin/celery.py", line 793, in execute_from_commandline 
    super(CeleryCommand, self).execute_from_commandline(argv))) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/bin/base.py", line 309, in execute_from_commandline 
    argv = self.setup_app_from_commandline(argv) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/bin/base.py", line 469, in setup_app_from_commandline 
    self.app = self.find_app(app) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/bin/base.py", line 489, in find_app 
    return find_app(app, symbol_by_name=self.symbol_by_name) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/app/utils.py", line 235, in find_app 
    sym = symbol_by_name(app, imp=imp) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/bin/base.py", line 492, in symbol_by_name 
    return symbol_by_name(name, imp=imp) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/kombu/utils/__init__.py", line 96, in symbol_by_name 
    module = imp(module_name, package=package, **kwargs) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/site-packages/celery/utils/imports.py", line 101, in import_from_cwd 
    return imp(module, package=package) 
    File "/Users/ray/Desktop/myheroku/practice/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 662, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/Users/ray/Desktop/myheroku/practice/src/tasks.py", line 4, in <module> 
    from src.celery import app 
ImportError: No module named 'src' 
+0

がフルを追加してくださいあなたのPYTHONPATHに親ディレクトリを追加...あなたができるそれを修正するにはあなたの質問に誤りのトレースバック。 –

+0

@KlausD。あなたのトレースバックはあなたのコードと一致しません。 – losee

+0

あなたのトレースバックはあなたのコードと一致しません。 –

答えて

0

あなたのPYTHONPATHがその中にsrcディレクトリを持っている必要があります。 cd srcを実行すると、モジュールはsrc.celeryの代わりにceleryと表示されます。

A. 1つの上のディレクトリ

cd .. && celery worker -A src.tasks -l info 

B.あなたのコードを実行

PYTHONPATH=.. celery worker -A src.tasks -l info 
+0

こうすれば、タスクという名前のモジュールはありません。 – losee

+0

良い点 - '-A'コマンドはロードすべきPythonモジュールです。この場合は' tasks.py'です。上記で提案したように 'src.tasks'でそれを変更することもできますし、importステートメントを' from celery import app'から変更することもできます。これは、コード内のimport文が 'from src import ...'構文を何回使用するかによって異なります。 –

関連する問題