V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cbsw
V2EX  ›  Django

[求助 celery+django] ImportError

  •  
  •   cbsw ·
    dengshuan · 2014-09-02 13:21:28 +08:00 · 3769 次点击
    这是一个创建于 3767 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目用的是 django 1.3,芹菜官方文档给的是 modern django 的例子,折腾好久总是各种问题,这个 gist 里问题是从 web 端发的 task 报错,而从 shell 里发的正常执行

    Stack Overflow 上问了半天没人回答( http://stackoverflow.com/questions/25614718/celery-with-django-1-3-keyerror-myproj-app1-tasks-add ),然后自己各种尝试,发现把 *views.py* 中 `from tasks import add` 改成 `from app1.tasks import add` 就可以了

    但是项目中都是用 `from myproj.app1.module import something` 这种风格的 `import`,但是这种方式 celery server 直接启动不了,出现 **ImportError:No module named xxx**

    有没有大神帮忙分析一下
    5 条回复    2014-09-02 19:39:22 +08:00
    cbsw
        1
    cbsw  
    OP
       2014-09-02 13:23:58 +08:00
    为什么我用不了 Markdown 呢,还没有对所有人公开么? @Livid
    bcxx
        2
    bcxx  
       2014-09-02 13:36:54 +08:00
    升级一下 django 会更简单吧……
    cbsw
        3
    cbsw  
    OP
       2014-09-02 14:10:19 +08:00
    @bcxx 这个不是由我说了算的,而且升级过程中也会有大量问题的
    wenbinwu
        4
    wenbinwu  
       2014-09-02 15:37:04 +08:00
    from .tasks import add
    cbsw
        5
    cbsw  
    OP
       2014-09-02 19:39:22 +08:00   ❤️ 1
    @wenbinwu @bcxx 问题已解决,看了下 celery 源码,找到 import 部分发现只在当前目录和子目录查找模块,所以老版本的 django project(mycelery.py上层) 不在 celery 路径中,直接在 mycelery.py 中加上 `sys.path.append(os.path.abspath(os.pardir))` 把上层目录即 project 的路径加入即可,还是沿用了项目中的 `from projectname.appname.modulename import something` 的格式不变。

    ImportError 多半是路径导致的,碰到这样问题应该先检查一下路径的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5298 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:09 · PVG 17:09 · LAX 01:09 · JFK 04:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.