django 独立脚本:无法从“芹菜”

时间:2021-03-07 20:31:41

标签: django celery

我正在尝试运行一个独立的 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

没有任何问题

但在独立时它会产生问题

1 个答案:

答案 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',)