Beheben Sie den ImportError: Cannot Import Name in Python

Salman Mehmood 15 Februar 2024
  1. Ursache des Fehlers ImportError: name kann nicht importiert werden in Python
  2. Beheben Sie den Fehler ImportError: cannot import name in Python
Beheben Sie den 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.

Python ImportError Namensbeispiel kann nicht importiert werden

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.

Salman Mehmood avatar Salman Mehmood avatar

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.

LinkedIn

Verwandter Artikel - Python Error