django独立脚本:无法导入名称';芹菜';从';芹菜';
我正在尝试运行一个独立的Django sciptdjango独立脚本:无法导入名称';芹菜';从';芹菜';,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
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独立脚本的方法如下所示的原因之一