Beheben Sie den ImportError: Cannot Import Name in Python
-
Ursache des Fehlers
ImportError: name kann nicht importiert werden
in Python -
Beheben Sie den Fehler
ImportError: cannot import name
in Python
Mit dieser Erklärung erfahren wir, warum wir einen Fehler erhalten, der lautet ImportError: kann den Namen nicht importieren
. Wir werden auch lernen, wie man diese Art von Fehler in Python behebt.
Ursache des Fehlers ImportError: name kann nicht importiert werden
in Python
Wir können diesen Fehler auf verschiedene Arten beheben, aber bevor wir uns mit der Behebung dieses Fehlers befassen, versuchen wir zu verstehen, warum dieser Fehler auftritt und wann der ImportError
im Allgemeinen auftritt.
Ein ImportError
in Python tritt auf, wenn die import
-Anweisung in Ihrem Code Schwierigkeiten beim erfolgreichen Importieren eines Moduls hat.
Ein solches Problem tritt häufig aufgrund einer fehlerhaften Installation einer externen Bibliothek oder eines ungültigen Pfads zu dem Modul auf, das Sie zu importieren versuchen.
Es stellt sich die Frage: Wann tritt der ImportError: cannot import name (xyz)
auf? Diese Art von ImportError
tritt im Allgemeinen auf, wenn sich die Klasse, die Sie zu importieren versuchen, in einer zirkulären Abhängigkeit befindet.
Was bedeutet das? Was ist eine zirkuläre Abhängigkeit? Eine zirkuläre Abhängigkeit tritt im Allgemeinen auf, wenn zwei Module versuchen, sich gleichzeitig zu importieren, sodass beide voneinander abhängig sind.
Um dies weiter zu erläutern, müssen wir uns ein Beispiel ansehen, um zu verstehen, wie und wann dieser Fehler auftritt. Nehmen wir an, wir haben ein paar Module: demo1.py
und demo2.py
.
Bevor wir uns den import
-Anweisungen zuwenden, schauen wir uns den Inhalt dieser Module und dann die import
-Anweisungen an.
Wie wir sehen können, hat das Modul demo2
ein paar Funktionen: demo2_func1()
und demo2_func2()
. Ebenso hat das Modul demo1
eine einzelne Funktion namens demo1_func1()
.
Wie wir sehen können, importieren wir innerhalb des Moduls demo2
demo1_func1
aus dem Modul demo1
. In ähnlicher Weise versuchen wir, innerhalb des Moduls demo1
die Funktion namens demo2_func2()
zu importieren, die Teil des Moduls demo2
ist.
Konzentrieren wir uns auf das Modul demo2
.
Wir können sehen, dass die Funktion demo2_func1()
einen String ausgibt und dann die Funktion demo1_func1()
lädt, die wir aus dem Modul demo1
importiert haben. Wenn demo1_func1()
aufruft, gibt es eine Zeichenfolge aus.
In der nächsten Zeile rufen wir innerhalb der Funktion demo1_func1()
die Methode demo2_func2()
auf, sodass wir sehen können, dass die Methode demo2_func2()
auch Teil des Moduls demo1
ist. Wir können sehen, dass diese beiden Module voneinander abhängig sind.
Wenn wir in diesem Fall eine Anweisung wie from demo1 import demo1_func1
und from demo2 import demo2_func2
verwenden, tritt eine zirkuläre Abhängigkeit auf.
Wenn wir das Modul demo2
ausführen, sollte die erwartete Ausgabe etwa so aussehen, da zunächst demo2_func1()
aufgerufen wird, dann fahren wir mit der Funktion demo1_func1()
fort und so weiter. Nach der Ausführung haben wir einen ImportError
, der besagt (cannot import name 'demo1_func1'
).
ImportError: cannot import name 'demo1_func1' from partially initialized module 'demo1' (most likely
due to a circular import)
Dies geschieht hauptsächlich, weil wir versuchen, auf die Inhalte eines Moduls von einem anderen zuzugreifen und umgekehrt. Wenn wir uns das Modul demo2.py
ansehen, versuchen wir, die Funktion demo1_func1
aus demo1
zu importieren, bevor demo1_func1
initialisiert wurde; dann beginnt das Programm.
Python initialisiert immer noch den Inhalt des Moduls demo1
, aber wir geben Python nicht genügend Zeit, um die Funktion demo1_func1
zu initialisieren. Wir rufen es direkt auf, weshalb wir auf diesen ImportError
gestoßen sind.
Beheben Sie den Fehler ImportError: cannot import name
in Python
Jetzt werden wir sehen, wie wir diesen Fehler beheben können. Wir können diesen Fehler auf zwei Arten beheben, aber wir verwenden den einfachsten Weg: um die zirkuläre Abhängigkeit zu vermeiden, und Python kann es selbst tun.
Um das Problem zu lösen, müssen wir bestimmte Codeänderungen vornehmen.
Wir müssen die import
-Anweisung ändern, und anstatt den Inhalt des Moduls zu importieren, importieren wir das gesamte Modul in beide Dateien.
Der Quellcode der Datei demo1.py
:
import demo2
def demo1_func1():
print("demo1_func1")
demo2.demo2_func2()
Der Code der Datei demo2.py
:
import demo1
def demo2_func1():
print("demo2_func1")
demo1.demo1_func1()
def demo2_func2():
print("demo2_func2")
if __name__ == "__main__":
demo2_func1()
Ausgang:
demo2_func1
demo1_func1
demo2_func2
Meistens tritt dieser Fehler auf, wenn wir die Flask-App mit dem Blueprint-Ansatz entwickeln. Wenn Sie also eine Flask-Struktur erstellen, müssen Sie möglicherweise diesem Link folgen.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedInVerwandter Artikel - Python Error
- Adresse wird bereits verwendet Fehler in Python
- AttributeError: __Exit__ in Python
- AttributeError: 'Dict'-Objekt hat kein Attribut 'Append' in Python
- AttributeError: 'NoneType'-Objekt hat kein Attribut 'Text' in Python
- AttributeError: Int-Objekt hat kein Attribut
- AttributeError: Modul Urllib hat keine Attributanforderung