2016-09-14 21 views
1

以下のエラーは、セロリの労働者を通過した場合にのみ発生することに注意してください。ターミナルで次のコマンドを使用して :セロリのタスクは、プロジェクト内からモジュールのImportErrorをインポートできません。

celery -A MarketPlaceTasks worker --loglevel=info 

Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/celery/app/trace.py", line 218, in trace_task 
    R = retval = fun(*args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/celery/app/trace.py", line 398, in __protected_call__ 
    return self.run(*args, **kwargs) 
    File "/home/nick/mpcrawler2/MarketPlaceTasks.py", line 65, in get_item_data 
    logger, request, run_data, store_config, app_config = setup_task(payload) 
    File "/home/nick/mpcrawler2/MarketPlaceTasks.py", line 33, in setup_task 
    store_config = ConfigReader.read_store_config(request.Store) 
    File "/home/nick/mpcrawler2/shared/ConfigReader.py", line 22, in read_store_config 
    from singletons.StoreData import StoreData 
    File "/home/nick/mpcrawler2/singletons/StoreData.py", line 3, in <module> 
    from models.StoreConfig import StoreConfig 
    File "/home/nick/mpcrawler2/models/StoreConfig.py", line 3, in <module> 
    from enums.MpStores import MpStore 
ImportError: No module named enums.MpStores 

私は別のモジュール内のすべての私の列挙型を持っています。モジュールは次のようになり、そしてプロジェクトと同じディレクトリ内に配置されています。私はpycharmまたは端末すべてを経由して、プロジェクトを実行するたびに

enum directory screenshot

意図したとおりに動作しているようです。

労働者の出発点は、次のようになります。

from celery import Celery 

app = Celery('tasks', broker='*some ampq address here*') 

__init__.pyファイルが空です。列挙型ファイルは、次のようになります。

from enum import Enum 

# noinspection SpellCheckingInspection 
class MpStore(Enum): 
    somevalue = 1 
    someothervalue = 2 
    etc = 3 

私はピップを使用してインストールされたenum34を使用していますのPython 2.7を使用していたよう。

私が質問に記入しなければならないことがあれば教えてください。

答えて

0

まあこの答えにアドバイスを、以下の回避策のいくつかの並べ替えのように思えるが、: How to accomplish relative import in python

私はそれらのすべてを含む「メイン」モジュール内のプロジェクトのほとんどを動かしました。それから私はできました:の代わりに 私は今from stuff.enums.MpStore import MpStore新しいモジュール名である "stuff"を使用します。

もっと良い方法を聞いてみたいと思います...

関連する問題