我正在尝试运行一个独立的 Django scipt
import os, sys, django
proj_path = "/path/to/django-project"
import ipdb; ipdb.set_trace()
# This is so Django knows where to find stuff.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "boiler.settings")
sys.path.append(proj_path)
django.setup()
当我运行它说
ImportError: cannot import name 'Celery' from 'celery' (/path/to/django-poject/boiler/celery.py)
我的文件夹结构:
django-poject
-- boiler
-- __init__.py
-- settings.py
-- celery.py
-- manage.py
__init__.py
from .celery import app as celery_app
__all__ = ['celery_app']
celery.py
import os
from celery import Celery
import django
import sys
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boiler.settings')
#This defines the celery app instance
redis = 'redis://:pass@localhost:6379/0'
app = Celery(dirname,
broker=redis,
backend=redis
)
我可以使用 celery 运行
activate virtualenv
cd to django-poject
celery -A boiler worker --loglevel=debug
没有任何问题
但在独立时它会产生问题
答案 0 :(得分:1)
您必须将 celery.py 命名为其他名称。像 django_celery.py 否则它不会工作。 Celery 没有这种方式也能正常工作,但您想与 django 集成,就像 Santhosh 所说的那样,它本身的绝对导入会给您带来问题。
在您项目的 __init__.py
中,您将需要以下内容:
from __future__ import absolute_import, unicode_literals
from your_path_to.django_celery import app as celery_app
__all__ = ('celery_app',)