задача сельдерея не может импортировать ImportError модуля из проекта

Я хотел бы отметить, что следующая ошибка возникает только при запуске через celery worker. с помощью следующей команды в терминале:

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

Всякий раз, когда я запускаю проект через pycharm или терминал, все работает как задумано.

Начальная точка рабочего выглядит так:

from celery import Celery

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

Файл __init__.py пуст. Файлы enum выглядят следующим образом:

from enum import Enum

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

Поскольку я использую Python 2.7, я использую enum34, который был установлен с помощью pip.

Пожалуйста, дайте мне знать, если есть что-то еще, что я должен указать в вопросе.


person Nick Kobishev    schedule 14.09.2016    source источник


Ответы (1)


Ну, это похоже на какую-то работу, но следуя совету в этом ответе: 4656228">Как выполнить относительный импорт в Python

Я переместил большую часть проекта в «основной» модуль, содержащий их все. и тогда я смог: вместо from enums.MpStore import MpStore
теперь я использую from stuff.enums.MpStore import MpStore "stuff" в качестве имени нового модуля.

Я хотел бы услышать о лучшем способе, хотя...

person Nick Kobishev    schedule 14.09.2016