celery任务无法从项目内部导入模块的ImportError

时间:2016-09-14 21:27:09

标签: python python-2.7 enums celery celery-task

我想注意,只有在通过芹菜工作者时才会出现以下错误。 在终端中使用以下命令:

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

我把所有的枚举都放在一个单独的模块中。该模块看起来像这样,并且位于与项目相同的目录中:

enum directory screenshot

每当我通过pycharm或终端运行项目时,一切似乎都按预期工作。

工人的起点如下:

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

当我使用Python 2.7时,我使用了使用pip安装的enum34

如果我在问题中提供了其他任何内容,请告诉我。

1 个答案:

答案 0 :(得分:0)

好吧似乎有些工作,但遵循这个答案中的建议: How to accomplish relative import in python

我将项目的大部分内容移动到包含所有项目的“main”模块中。然后我能够: 而不是$PATH
我现在使用from enums.MpStore import MpStore“stuff”作为新的模块名称。

我很想听到更好的方式......