【问题标题】:Import Error starting Celery worker导入 Celery 工作程序时出错
【发布时间】:2014-07-26 02:13:17
【问题描述】:

当我使用 celery worker 命令启动 celery worker 时出现以下错误。否则,Django 项目似乎运行良好。

$ celery -A testproj worker -l info
Traceback (most recent call last):
  File "/Users/devang/virtualenvs/testproj/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/__main__.py", line 30, in main
    main()
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/celery.py", line 81, in main
    cmd.execute_from_commandline(argv)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/celery.py", line 769, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/base.py", line 306, in execute_from_commandline
    return self.handle_argv(self.prog_name, argv[1:])
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/celery.py", line 761, in handle_argv
    return self.execute(command, argv)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/celery.py", line 693, in execute
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/worker.py", line 179, in run_from_argv
    return self(*args, **options)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/base.py", line 269, in __call__
    ret = self.run(*args, **kwargs)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/bin/worker.py", line 212, in run
    state_db=self.node_format(state_db, hostname), **kwargs
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/worker/__init__.py", line 95, in __init__
    self.app.loader.init_worker()
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/loaders/base.py", line 128, in init_worker
    self.import_default_modules()
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/loaders/base.py", line 116, in import_default_modules
    signals.import_modules.send(sender=self.app)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/utils/dispatch/signal.py", line 166, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/amqp/utils.py", line 42, in __call__
    self.set_error_state(exc)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/amqp/utils.py", line 39, in __call__
    **dict(self.kwargs, **kwargs) if self.kwargs else kwargs
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/app/base.py", line 327, in _autodiscover_tasks
    self.loader.autodiscover_tasks(packages, related_name)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/loaders/base.py", line 251, in autodiscover_tasks
    related_name) if mod)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/loaders/base.py", line 272, in autodiscover_tasks
    return [find_related_module(pkg, related_name) for pkg in packages]
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/celery/loaders/base.py", line 282, in find_related_module
    pkg_path = importlib.import_module(package).__path__
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/cacheops/__init__.py", line 8, in <module>
    install_cacheops()
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/cacheops/query.py", line 571, in install_cacheops
    for model in get_models(include_auto_created=True):
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/django/db/models/loading.py", line 232, in get_models
    self._populate()
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name, True)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/django/db/models/loading.py", line 97, in load_app
    app_module = import_module(app_name)
  File "/Users/devang/virtualenvs/testproj/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
ImportError: No module named accounts

我安装的应用程序看起来像 - INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'cacheops', '帐户', )

我已经按照链接http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#django-first-steps中的建议在 Django 中安装了 celery 项目

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

    发现问题。我的Django项目结构没有遵循默认结构-

    --proj |-- __init__.py |-- settings.py --accounts |--__init__.py --app2 |-- __init__.py

    如果遵循: --proj |-- __init__.py |-- settings.py |-- apps |--accounts |--__init__.py |--app2 |-- __init__.py

    导致 Celery 找到模块。

    【讨论】:

    • 请详细说明你做了什么来解决它,因为我遇到了同样的问题。
    • 我改变了我的项目结构。
    • 好的,谢谢。看来我遇到了另一个问题,芹菜不会使用我的 virtualenv。所以我最终使用了 python3.4 -m celery worker。不过还是谢谢!
    【解决方案2】:

    如果你有这样的结构,你可以用这种方式“破解”它:

    sys.path.append(os.path.abspath('apps'))
    

    设置前

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
    

    它对我有用。当然你必须将sys.path中的路径调整为你的项目结构。

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2011-03-21
      • 2018-03-10
      • 2017-02-25
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多