在项目中导入芹菜失败,在manage.py shell中工作(有点)



我在这里查看了这个列表,但我无法让它工作:

http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

所以我做的是:1) 下载了芹菜模块并将它们添加到我的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__))
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) 已安装拉比3) 在设置中设置内容.py:

INSTALLED_APPS = (
    ---
    'djcelery',
)

最终:

BROKER_URL = 'amqp://guest:guest@localhost:5672/'
import djcelery
djcelery.setup_loader()

4) 运行python manage.py syncdb

5) 由于我使用mod_wsgi,我也将其添加到我的wsgi.py中(除了我之前展示的代码)

import djcelery
djcelery.setup_loader()

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) 我运行:pythonmanage.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

当我转到manage.py shell并键入从芹菜进口任务-它工作得很好。如果我从core.tasks导入函数,那么我会得到完全相同的错误消息。

有人能向我解释一下这里是什么吗。。

Alan

尝试将tasks.py更改为:

from __future__ import absolute_import
from celery import task

可能是celery/celery.py与抛出错误的模块(tasks.py)位于同一目录中,而这作为相对导入失败了。

Yikes,你第一步从哪里得到的??我从未需要更改manage.pywsgi.py文件来运行其他包。你说"下载了芹菜模块",然后你就得到了所有的sys.path修改代码。这让我相信你没有使用pipvirtualenv。使用这两种工具,你的生活会轻松很多。你会简化事情,你的团队会永远爱你。当Python包管理存在时,不要过度复杂化,以使这一过程变得轻松。路径篡改很少是必要的。

你提到的那些芹菜的第一步实际上就是它所需要的。看起来你已经处理了那个特殊的mod_wsgi音符。我的猜测是问题出在第一步——不管你对manage.py和wsgi.py做了什么修改。所有其他步骤看起来都很好。

我会复制你的代码,制作一个新的virtualenv,pip安装这些包,并删除所有的路径设置内容。使用django-admin.py startproject xxx可以查看普通的manage.pywsgi.py文件的外观。也可以使用DEBUG=True来帮助进行故障排除。当这起作用并解决问题时,用pip需求文件替换settings.ini

*你用的是南方,所以记住python manage.py migrate djcelery。(在步骤4中,您只能使用syncdb)。我不相信这样做会修复导入错误,但从更大的角度来看,这是必要的。

最新更新