代码之家  ›  专栏  ›  技术社区  ›  amit_183

芹菜中的导入错误

  •  20
  • amit_183  · 技术社区  · 11 年前

    这是我正在运行的代码:

    from __future__ import absolute_import
    from celery import Celery
    celery1 = Celery('celery',broker='amqp://',backend='amqp://',include=['tasks'])
    
    celery1.conf.update(
       CELERY_TASK_RESULT_EXPIRES=3600,
           )
    if __name__ == '__main__':
     celery1.start()
    

    当我执行上面的代码时,它会给我以下错误:

       ImportError: cannot import name Celery
    
    4 回复  |  直到 8 年前
        1
  •  34
  •   user692942    10 年前

    我也遇到了同样的错误,重命名文件修复了它。

    对于其他遇到这种情况的人来说,你遇到这个问题的原因是,你的本地芹菜.py被导入,而不是实际的芹菜包,因此python找不到芹菜(大写“C”),就像在芹菜包中的类中一样,但它确实找到了芹菜(小写“C”),这是你的本地的芹菜.py,里面没有定义芹菜类。

    我刚刚将本地的celery.py重命名为_celery.py,但除了celery.py之外的任何名称都应该解决这个问题。

    编辑: 我还想提一下,在celery.py文件所在的目录之外调用芹菜守护进程也可以。出于测试目的,重命名文件就足够了,但您仍然可以使用celery.py作为本地文件名。例如,给定以下文件夹结构:

    + root/  
       - proj/  
         * celery.py  
         * tasks.py

    如果您从根文件夹调用芹菜,您应该能够键入:

    celery worker --app=proj [optional args]
    

    您可以使用“-l info”可选日志参数验证您的任务是否存在,并查看介绍数据正下方的[任务]列表。

    更多信息请参阅此处的教程文档: http://docs.celeryproject.org/en/latest/getting-started/next-steps.html#about-the-app-argument

        2
  •  3
  •   ootwch    8 年前

    我将这个问题与pycharm和unittests结合在一起,并想添加一个额外的答案。我已经用python 3测试过了,但假设如果你使用 from __future__ import absolute_import 早期版本。

    pycharm错误报告中描述了根本原因 https://youtrack.jetbrains.com/issue/PY-15889

    摘要:如果您在pycharm中运行单元测试,它总是将包含测试脚本的文件夹添加到 开始 属于 sys.path 。如果你 celery.py 在相同的路径中,python将首先尝试加载它。

    我没有更改文件名,而是通过从中删除此文件夹来解决此问题 搜索路径 导入之前 芹菜.py 在我的 ..._Test.py 测试脚本。

    # If running in pycharm, pycharm always adds the current path to the beginning (!) of sys.path
    # I have not found a setting to fix this - so I just remove the path again
    # This block can be removed once https://youtrack.jetbrains.com/issue/PY-15889 if fixed
    import sys
    import os
    sys.path.remove(os.path.dirname(__file__)) 
    
    import celery
    
        3
  •  0
  •   Manas Chaturvedi    7 年前

    对于那些即使在重命名您的 celery.py 文件,只需删除 celery.pyc 文件。

        4
  •  0
  •   Yusuf    2 年前

    如果您在虚拟环境中安装了Celery,请确保您选择了与该虚拟环境对应的相同python解释器。

    在VS代码中,您可以从这里选择解释器。

    视图-命令调色板-Python:选择解释器