python celery pycharm celery-task

python - error de importación en el apio



celery pycharm (3)

Este es el código que estoy ejecutando:

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()

cuando ejecuto el código anterior me da el siguiente error:

ImportError: cannot import name Celery


Me encontré con este mismo error y el cambio de nombre del archivo lo solucionó.

Para cualquier persona que se encuentre con esto, la razón por la que se produce este problema, su celery.py local se está importando en lugar del paquete de apio real, por lo tanto, la razón por la que Python no puede encontrar el apio (mayúscula "C"), como en la clase de el paquete de apio, pero encuentra apio ("c" minúscula), que es su local celery.py que no tiene la clase de apio definida en su interior.

Acabo de cambiar mi nombre de celery.py local a _celery.py, pero cualquier nombre que no sea celery.py debería resolver el problema.

Edición: También quise mencionar que funcionará el hecho de llamar al demonio de apio fuera del directorio donde se encuentra el archivo celery.py. Para propósitos de prueba, el cambio de nombre del archivo será suficiente, pero aún puede usar celery.py como su nombre de archivo local. Por ejemplo, dada la siguiente estructura de carpetas:

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

Si llama a apio desde la carpeta raíz, debería poder escribir:

celery worker --app=proj [optional args]

Puede verificar que sus tareas están presentes utilizando el argumento de registro opcional "-l info" y ver la lista de [tareas] directamente debajo de los datos de introducción.

Más información se encuentra en los documentos del tutorial aquí: http://docs.celeryproject.org/en/latest/getting-started/next-steps.html#about-the-app-argument


Para aquellos que aún se encuentran con este error, incluso después de cambiar el nombre de su archivo celery.py dentro del directorio de su proyecto, simplemente elimine el archivo celery.pyc también.


Tuve este problema junto con pycharm y unittests, y quiero agregar una respuesta adicional. Lo he probado con Python 3 pero asumo que sucede lo mismo si usa from __future__ import absolute_import con versiones anteriores.

La causa raíz se describe en el informe de errores pycharm https://youtrack.jetbrains.com/issue/PY-15889

Resumen: si ejecuta unittests en pycharm, siempre agrega la carpeta que contiene el script de prueba al comienzo de sys.path . Si su celery.py está en el mismo camino, Python intentará cargarlo primero.

En lugar de cambiar los nombres de los archivos, resolví esto eliminando esta carpeta de sys.path antes de importar celery.py en mis ..._Test.py scripts de prueba.

# 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