Django импорт портит сельдерей - PullRequest
0 голосов
/ 18 марта 2020

У меня есть django проект со следующей Django структурой проекта:

project/
  ...
  some_app/
    __init__.py
    some_module_where_i_import_some_utils.py
  server/
    __init__.py
    settings/
      __init__.py
      common.py
      dev.py
      ...
    celery.py
    ...
  utils/
    __init__.py
    some_utils.py
  manage.py
  ...

При использовании утилит я импортирую их следующим образом:

from project.utils.some_utils import whatever

И это работает хорошо. Однако, когда я запускаю сельдерея с использованием DJANGO_SETTINGS_MODULE=server.settings.dev celery -A server worker --beat -l info autodiscover_tasks, происходит сбой со следующей ошибкой ModuleNotFoundError: No module named 'project'.

Вот содержимое server/celery.py:

import os

from celery import Celery


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings.prod")

app = Celery("server")

app.config_from_object("django.conf:settings", namespace="CELERY")

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print("Request: {0!r}".format(self.request))

Вот server/__init__.py:

from .celery import app as celery_app

__all__ = ("celery_app",)

1 Ответ

0 голосов
/ 19 марта 2020

Изменение celery.py выполнено следующим образом:

import os
import sys

from celery import Celery

sys.path.append("..")
...

Я не уверен, что это может вызвать проблемы в будущем, и продолжу изучать его и обновлю ответ, если я подойду с чем-то лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...