Django 在project中导入芹菜失败,在manage.py shell中工作(有点)
我正在查看此列表,但无法使其正常工作: 所以我所做的是: 1) 下载芹菜模块并将其添加到my manage.py和wsgi.py:Django 在project中导入芹菜失败,在manage.py shell中工作(有点),django,celery,django-celery,Django,Celery,Django Celery,我正在查看此列表,但无法使其正常工作: 所以我所做的是: 1) 下载芹菜模块并将其添加到my manage.py和wsgi.py: # -*- coding: utf-8 -*- #!/usr/bin/env python import os, sys from ConfigParser import RawConfigParser config = RawConfigParser() abspath = os.path.abspath(os.path.dirname(__file__))
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import os, sys
from ConfigParser import RawConfigParser
config = RawConfigParser()
abspath = os.path.abspath(os.path.dirname(__file__))
config.read(abspath+'/subfolder/settings.ini')
homedir = config.get('paths', 'libspath')
projectspath = config.get('paths', 'projectspath')
path = [
'/Django-1.4.5/',
'/South-0.7.6',
'/python-openid-master',#07.05.2013 checkout from https://github.com/openid/python-openid
'/mbi-django-rosetta-eca151e',
'/phonenumbers-5.2b1',
'/django-phonenumber-field-develop',
'/django-openid-auth-0.5',
'/celery-3.0.19',
'/django-celery-3.0.17',
'/kombu-2.5.11',
'/billiard-2.7.3.28',
'/anyjson-0.3.3',
'/amqp-1.0.12'
]
for item in path:
module = homedir+item
if module not in sys.path:
sys.path.append(module)
2) 已安装rabbitmq
3) 在settings.py中设置内容:
INSTALLED_APPS = (
---
'djcelery',
)
最后:
BROKER_URL = 'amqp://guest:guest@localhost:5672/'
import djcelery
djcelery.setup_loader()
4) 运行python manage.py syncdb
5) 由于im使用mod_wsgi,我也将其添加到了我的wsgi.py中(除了我前面显示的代码)
6) 我在我的核心应用程序中创建了tasks.py:
import logging, subprocess
logger = logging.getLogger('debugger')
from django.conf import settings
from celery import task
@task
def runfunc(funcname, refno):
x = 'nothing to see here'
7) 我运行:python manage.py芹菜工人--loglevel=info
得到一大堆的东西意味着一切都好:P
但当我转到django视图时,它应该运行我得到的任务:
cannot import name task
Request Method: GET
Request URL: http://localhost/url/that/triggers/task/
Django Version: 1.4.5
Exception Type: ImportError
Exception Value:
cannot import name task
Exception Location: /path/to/project/core/tasks.py in <module>, line 6
无法导入名称任务
请求方法:获取
请求URL:http://localhost/url/that/triggers/task/
Django版本:1.4.5
异常类型:ImportError
异常值:
无法导入名称任务
异常位置:/path/to/project/core/tasks.py in,第6行
当我转到manage.py shell并键入
从芹菜进口任务-它的工作刚刚好。
如果我从core.tasks导入函数,则会得到完全相同的错误消息
谁能给我解释一下上面是什么
Alan尝试将tasks.py更改为:
from __future__ import absolute_import
from celery import task
您可能有一个
芹菜/
或芹菜.py
与抛出错误的模块(tasks.py
)位于同一目录中,这是一个相对导入失败的情况。Yikes,您第一步是从哪里得到这些信息的??我从来没有改变过manage.py
或wsgi.py
文件来运行额外的包。你说“下载的芹菜模块”,然后你就有了所有的sys.path
转换代码。这让我相信您没有使用pip
和virtualenv
。使用这两种工具,你的生活将变得更加轻松。你会简化很多事情,你的团队会永远爱你。当Python包管理存在时,不要过度复杂化,以使其不受痛苦的影响。路径损坏很少是必要的
你所提到的就是你所需要的一切。看起来您已经处理了这个特殊的mod\wsgi
note。我想问题在于第一步——不管您对manage.py和wsgi.py做了什么修改。所有其他步骤看起来都很好*
我会复制你的代码,制作一个新的virtualenv,pip安装这些软件包并删除所有路径设置的东西。使用django-admin.py启动项目xxx
查看普通manage.py
和wsgi.py
文件的外观。还可以使用DEBUG=True
帮助进行故障排除。当这起作用并解决问题后,用pip替换设置.ini
*您使用South,所以请记住
python manage.py migrate djcellery
。(在步骤4中,您仅使用syncdb
)。我不相信这样做会修复导入错误,但从大局来看这是必要的。django视图真的在django中运行吗?这不是一个静态页面吗?设置模块是否已加载?(来自django.conf import settings
)是的,它正在通过django运行,设置模块也在那里加载。如果您查看第6点),您可以看到设置在那里加载。是的,我看到了,但在任务模块中。它是否也加载到视图中?我不熟悉芹菜作为django应用程序,因此它可能是一个自动视图。在“从管理运行”和“从视图运行”案例中,您是否也可以从manage.py打印“abspath”和“sys.path”?我怀疑您有一些python路径问题。第一部分看起来有点像生成文件的构建类型。我当然希望是……不。既不使用pip也不使用virtualenv。我发现更新manage.py和wsgi.py要比仅仅为了测试某些django模块/代码片段的不同版本而更新(或创建新的)虚拟环境容易得多。因此,我将使用不同的虚拟环境来代替版本化文件,这确实解决了这个问题。在检查了我头脑中的文件夹和项目以查找芹菜的文件夹和文件后(什么也没有找到),我记得我首先创建了名为芹菜.py的文件,后来出于完全相同的原因将其重命名为tasks.py。但是我忘了删除.pyc文件。造成了这一切混乱的原因:/
from __future__ import absolute_import
from celery import task