cannot import name 'X' from 'Y'
Explication
Causes courantes
- **Nom mal orthographié** ou inexistant dans le module. - **Import circulaire** : `a.py` importe `b.py` qui importe `a.py` ; au moment de l'import, `X` n'est pas encore défini. - **Élément déplacé selon la version** : certains noms changent de module entre versions d'un paquet. - **Fichier local qui masque** le vrai module.
1. Vérifiez l'orthographe et l'existence
import collections
print([n for n in dir(collections) if "ordered" in n.lower()])
# -> ['OrderedDict']
2. Cassez l'import circulaire
Déplacez l'import à l'intérieur de la fonction qui l'utilise (import différé) :
def traiter():
from services import calculer # importé seulement à l'appel
return calculer()
Ou extrayez le code partagé dans un module tiers que les deux importent.
3. Importez le module, pas le nom
Importer le module entier évite parfois le problème de timing :
import services
services.calculer() # au lieu de `from services import calculer`
Comment prevenir cette erreur
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacter