У меня есть 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",)