Python >> Tutoriel Python >  >> Python

Erreur d'importation Python (ModuleNotFoundError)

Erreur d'importation de Python (ModuleNotFoundError ) indique que vous avez essayé d'importer un module que Python ne trouve pas. Il peut généralement être éliminé en ajoutant un fichier nommé __init__.py au répertoire puis en ajoutant ce répertoire à $PYTHONPATH . Si ce fichier (__init__.py ) se trouve dans le dossier, modifiez la position de l'importation dans le fichier en cours d'importation de haut en bas.

Pourquoi Python ImportError se produit-il ?

Un ImportError est détecté lorsque Python a des problèmes avec une importation de module réussie. Généralement, ce problème est causé par un chemin incorrect et s'affiche généralement avec le message indiquant qu'il n'y a "Aucun module nommé (…)" ou "impossible d'importer le nom (…)" .

Vous pouvez voir un exemple interactif dans notre projet de navigateur en ligne :

Exercice  :Essayez de corriger le message d'erreur en suivant l'astuce dans le commentaire !

Que pouvons-nous faire avec cette erreur ?

Création d'un package local

Si l'erreur ImportError est levée (ImportError :Aucun module nommé (…) ), lorsque vous importez votre propre script, vous devez vérifier si le script que vous souhaitez importer a un fichier nommé __init__.py dans son répertoire, si ce n'est pas le cas, vous devez le créer, car les fichiers nommés __init__.py sont utilisés pour marquer les répertoires sur le disque comme des répertoires de packages Python, et les répertoires sans un tel fichier sont ignorés.

Pour ajouter ce fichier, créez simplement un document texte nommé __init__ dans votre dossier et changez son extension en .py => __init__.py .

Remarque :N'oubliez pas que le __init__.py le fichier ne peut pas avoir d'autres caractères dans son nom !!!

Ajout de votre package au chemin

Lorsque vous souhaitez ajouter votre module au chemin de manière permanente, vous devez trouver le chemin du dossier site-packages et ajouter le dossier contenant votre module à ce dossier ou à un autre (où bien sûr Python recherche les modules).

La question est :comment trouver le chemin ?

Le moyen le plus simple de trouver le chemin est d'écrire le script suivant :

import sys
print(sys.path)

# Output:
[‘PathToYourFolders’, 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\DLLs', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\lib', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38', 'C:\\Users\\YourUsername\\AppData\\Roaming\\Python\\Python38\\site-packages', 'C:\\Users\\YourUsername\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages']

Ensuite, nous voyons tous les chemins dans lesquels Python recherche les modules, ajoutez simplement votre module à l'un d'entre eux (le meilleur …\lib\site-packages). Une fois cela fait, nous pourrons appeler le module à partir de n'importe quel script Python.

Lorsque vous avez plusieurs fichiers qui s'importent mutuellement

Parfois en Python, même si vous avez un __init__.py fichier dans votre dossier, l'ImportError se produit, il indique que le nom ne peut pas être importé. Pour éliminer ce problème, l'ordre des importations doit être modifié. Le code à l'origine de l'erreur :

       #a2.py file
from test.b import b2
def a1():
    print('a1')
    b2()
from test.a import a1
       #b2.py file
def b1():
    print('b1')
    a1()
def b2():
    print('b2')
if __name__ == '__main__':
    b1()

La sortie sera la suivante - ImportError: cannot import name 'a1' .
Mais si nous changeons la position de from test.b import b2 en A comme ci-dessous :

def a1():
    print('a1')
    b2()
from test.b import b2

Ensuite, nous pouvons obtenir ce que nous voulons :

b1
a1
b2

Résumé

Au début, nous avons expliqué comment résoudre le problème à partir du titre, puis nous avons expliqué pourquoi l'erreur d'importation se produit. Puis trois voies d'action ont été présentées. D'abord décrit comment créer un package local (en ajoutant __init__.py ), deuxièmement comment créer un package qui peut être appelé à partir de n'importe quel script Python (ajoutez le module au dossier site-packages) et troisièmement que faire lorsque vous avez plusieurs fichiers qui s'importent (ImportError: cannot import name (...) ).

J'espère que cet article vous a aidé à comprendre pourquoi cette erreur s'est produite dans votre fichier et vous a donné un indice pour la supprimer.