Подтвердить что ты не робот

Ошибка импорта в сельдерее

это код, который я запускаю:

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
4b9b3361

Ответ 1

Я столкнулся с этой же ошибкой и переименовал файл, исправил его.

Для кого-то, кто сталкивается с этим, причина, по которой вы получаете эту проблему, ваш локальный celery.py импортируется вместо фактического пакета сельдерея, поэтому причина, по которой python не может найти Celery (капитал "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" и просмотр списка [задач] непосредственно под вводными данными.

Дополнительная информация содержится в учебниках docs: http://docs.celeryproject.org/en/latest/getting-started/next-steps.html#about-the-app-argument

Ответ 2

У меня была эта проблема вместе с pycharm и unittests, и я хочу добавить дополнительный ответ. Я тестировал его с помощью python 3, но предполагаю, что это произойдет, если вы используете from __future__ import absolute_import с более ранними версиями.

Основная причина описана в отчете об ошибке pycharm https://youtrack.jetbrains.com/issue/PY-15889

Резюме. Если вы запускаете unittests в pycharm, он всегда добавляет папку, содержащую тест script, в начало sys.path. Если ваш celery.py находится в одном и том же пути, python попытается загрузить его в первую очередь.

Вместо изменения имен файлов я решил это, удалив эту папку из sys.path перед импортом celery.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

Для тех, кто все еще сталкивается с этой ошибкой даже после переименования вашего файла celery.py внутри вашего каталога проекта, просто удалите файл celery.pyc.