cannot import name 'X' from 'Y'

Python Erreur courante

Explication

L'erreur `ImportError: cannot import name 'X' from 'Y'` survient quand le module `Y` existe bien, mais que le nom précis `X` que vous voulez importer n'y est pas trouvé. Les deux causes principales sont une **faute de frappe / un nom inexistant** et un **import circulaire**. ```python from collections import OrderedDictt # faute de frappe (deux "t") # ImportError: cannot import name 'OrderedDictt' from 'collections' ```

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

- **Structurez les dépendances en arbre**, sans cycles (un module « bas niveau » ne doit pas importer un module « haut niveau »). - **Vérifiez la documentation de version** quand un import casse après une mise à jour. - Référence : [docs.python.org — ImportError](https://docs.python.org/fr/3/library/exceptions.html#ImportError).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Comment savoir si c'est un import circulaire ?
Si le nom existe bien dans le module (vérifiez avec `dir`) mais que l'erreur n'apparaît qu'au démarrage, c'est très probablement un cycle d'imports. La trace montre souvent deux de vos modules qui s'importent mutuellement.
Quelle différence avec `ModuleNotFoundError` ?
`ModuleNotFoundError` = le module entier est introuvable. `cannot import name` = le module existe, mais le **nom précis** demandé n'y est pas (faute de frappe, cycle, ou version).

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.