web-dev-qa-db-fra.com

erreur d'importation dans le céleri

c'est le code que je lance:

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 __== '__main__':
 celery1.start()

quand j'exécute le code ci-dessus, il me donne l'erreur suivante:

   ImportError: cannot import name Celery
19
amit_183

J'ai rencontré cette même erreur aussi et renommer le fichier l'a corrigé.

Si vous rencontrez ce problème, la raison pour laquelle vous rencontrez ce problème est que votre céleri.py local est importé au lieu du package céleri, raison pour laquelle python ne trouve pas le céleri (C "en majuscule") le paquet céleri, mais il trouve le céleri (minuscule "c"), qui est votre céleri.py local dans lequel la classe Céleri n'est pas définie.

Je viens de renommer mon céleri.py local en _celery.py, mais tout nom autre que celery.py devrait résoudre le problème.

Edit: je voulais également mentionner que l'appel du démon céleri en dehors du répertoire dans lequel se trouve le fichier celery.py fonctionnera également. À des fins de test, il suffit de renommer le fichier, mais vous pouvez toujours utiliser celery.py comme nom de fichier local. Par exemple, étant donné la structure de dossiers ci-dessous:

+ racine proj/
 * céleri.py 
 * tâches.py

Si vous appelez céleri à partir du dossier racine, vous devriez pouvoir taper:

celery worker --app=proj [optional args]

Vous pouvez vérifier que vos tâches sont présentes en utilisant l'argument de journal facultatif "-l info" et en affichant la liste [tâches] directement sous les données d'introduction.

Pour plus d’informations, consultez la documentation du tutoriel ici:/- http://docs.celeryproject.org/fr/latest/getting-started/next-steps.html#about-the-app-argument

31
Jaredp37

J'ai eu ce problème avec pycharm et unittests, et je veux ajouter une réponse supplémentaire. Je l'ai testé avec Python 3, mais je suppose que la même chose se produit si vous utilisez from __future__ import absolute_import avec des versions antérieures.

La cause première est décrite dans le rapport de bogue pycharm https://youtrack.jetbrains.com/issue/PY-15889

Résumé: Si vous exécutez unittests dans pycharm, le dossier contenant le script de test est toujours ajouté au fichier début de sys.path. Si votre celery.py se trouve dans le même chemin, python essaiera de le charger en premier.

Au lieu de changer les noms de fichiers, j'ai résolu ce problème en supprimant ce dossier de sys.path avant d'importer celery.py dans mes scripts de test ..._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
1
ootwch

Pour ceux qui rencontrent encore cette erreur même après avoir renommé votre fichier celery.py dans votre répertoire de projet, supprimez également le fichier celery.pyc.

0
Manas Chaturvedi