Django, ImportError: cannot import name Celery, possible circular import?

半世苍凉 提交于 2019-12-02 17:53:34

Adding the following lines to cloud/celery.py:

import celery
print celery.__file__

gave me the file itself and not the celery module from the library. After renaming celery.py to celeryapp.py and adjusting the imports all errors were gone.

Note:

That leads to a change in starting the worker:

celery worker --app=cloud.celeryapp:app

For those running celery==3.1.2 and getting this error:

TypeError: unpack_from() argument 1 must be string or read-only buffer, not memoryview

Apply the patch mentioned here: https://github.com/celery/celery/issues/1637

With Django 1.7.5, Celery 3.1.17, and Python 2.7.6 I found that I was still getting these ImportError: cannot import name Celery. But only when running tests under PyCharm 4.0.4.

I found that a solution was not to rely on from __future__ import absolute_import as described in First Steps with Django. Instead I renamed proj/proj/celery.py to proj/proj/celery_tasks.py and then changed the content of __init__.py to match: from .celery_tasks import app as celery_app. No more multiple instances of files named celery.py to cause import confusion seemed to be a simpler approach.

Did you add the line:

from __future__ import absolute_import

to the top of your cloud/celery.py module?

Read the breakdown of the example here: http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

got the same error

my celery settings filename which was(celery.py) was conflicting with 'celery' package...

so while doing this-> from celery import Celery , it was raising error- cannot import name Celery

solution->just change the 'celery.py' to something else like 'celery-settings.py'

Work for me ( some bug after deploy in server ): Remove all *.pyc files from project and restart him.

I got the same error. It turns out there was a problem with my Celery version. I upgraded to 3.1 and celeryd is now deprecated for this version (http://celery.readthedocs.org/en/latest/whatsnew-3.1.html). So I had to downgrade to the version 3.0.19 that was the previous stable version used for the project, and it works good so far.

    pip install celery==3.0.19

Anyway, if you don't want to downgrade, the replacement for celeryd in the version 3.1 is celery worker. Check here for more info: http://celery.readthedocs.org/en/latest/userguide/workers.html.

Hope this helps! :)

For someone who want to know what cause this error:
I have meet this problem just now, then I found the problem --- sys.path.
Maybe you add some path to sys.path like me, I add below code in manage.py,

ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
SRC_PATH = os.path.join(ROOT_PATH, 'src')
CONF_PATH = os.path.join(ROOT_PATH, 'conf')

sys.path.insert(0, SRC_PATH)
sys.path.insert(0, CONF_PATH)

so, from celery import Celery would search celery in SRC_PATH and CONF_PATH first, that's the problem.

change to

sys.path.append(SRC_PATH)
sys.path.append(CONF_PATH)

It would search in python's lib and site-packages first. Solved perfectly.

Note that older Django projects have the manage.py script in the same directory as the project directory. That is, the structure looks like this:

- proj/
  - proj/__init__.py
  - proj/celery.py
  - proj/urls.py
  - proj/manage.py
  - proj/settings.py

instead of this:

- proj/
  - proj/__init__.py
  - proj/celery.py
  - proj/settings.py
  - proj/urls.py
- manage.py

In this case, you will just have to rename the celery.app file to something different, like celeryapp.py as suggested in the accepted answer above.

I got the same error.

Seems that from __future__ import absolute_import DOES NOT work for Python 2.6.1, still not raising an error.

Upgraded to Python 2.7.5 and it just worked.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!