Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django独立脚本:无法导入名称';芹菜';从';芹菜';_Django_Celery - Fatal编程技术网

django独立脚本:无法导入名称';芹菜';从';芹菜';

django独立脚本:无法导入名称';芹菜';从';芹菜';,django,celery,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.setti

我正在尝试运行一个独立的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
\uuuu init\uuuuu.py

from .celery import app as celery_app

__all__ = ['celery_app']
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
    )
芹菜.py

from .celery import app as celery_app

__all__ = ['celery_app']
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
    )
我能用它来做芹菜

activate virtualenv

cd to django-poject

celery -A boiler worker --loglevel=debug
没有任何问题


但是在独立的情况下,它会产生问题,你必须给你的芹菜取个别的名字。像django_Cellery.py一样,否则它不会工作。芹菜没有这种方式很好,但是你想融入django,就像Santhosh说的,它本身的绝对重要性给你带来了问题

在项目的
\uuuu init\uuuuuuy.py
中,您需要以下内容:

from __future__ import absolute_import, unicode_literals
from your_path_to.django_celery import app as celery_app

__all__ = ('celery_app',)

您不应该将文件命名为
celery.py
,因为这会隐藏第三方模块的名称。我不确定这是否是导致您的问题的原因,但这是导致导入的常见原因。但是,当我运行
runserver
芹菜
命令时,它没有任何问题。如果我确切知道问题出在哪里,我可能会提交答案。我只是有预感。此错误是循环导入的典型错误,这通常是由模块名称冲突引起的。stackoverflow上已经有许多类似的问题。我不明白为什么芹菜文档建议将文件命名为
芹菜.py
。我认为避免模块名称重叠是一种很好的做法。这是否回答了您的问题?另一个:我也不知道。导入者可能会令人困惑。我的猜测是,当您运行
芹菜
命令时,芹菜已经在。事情发生的顺序可能很重要。这就是为什么推荐的实现django独立脚本的方法如下所示的原因之一