Seite 1 von 1

Python Dateien importieren

Verfasst: Dienstag 21. April 2020, 14:06
von toper
Hallo zusammen.
Man kann ja mit dem import Befehl andere python scripts importieren.
Damit kann ich allerdings nur von einer Datei auf die andere zugreifen.
Gibt es eine Möglichkeit wie das in beide Richtungen funktioniert?
Also Datei A ruft definitionen von Datei B auf und umgekehrt.

Re: Python Dateien importieren

Verfasst: Dienstag 21. April 2020, 14:28
von __blackjack__
@toper: Das willst Du nicht. Wenn sich Module gegenseitig benötigen, dann sind die so eng verbandelt das es nicht zwei Module sein sollten. Zirkuläre Importabhängigkeiten sind kompliziert und sehr fehleranfällig.

Re: Python Dateien importieren

Verfasst: Dienstag 21. April 2020, 14:30
von toper
Ok, ich dachte da gäbe es eine einfache Möglichkeit.
Aber trotzdem danke für die Hilfe

Re: Python Dateien importieren

Verfasst: Dienstag 21. April 2020, 14:32
von __deets__
Jein. Zirkulaere importe loesen einen Fehler aus. Und ein solches Design deutet auf ein konzeptionlles Problem hin. Das heisst aber nicht, dass man zwei Module nicht zur Zusammenarbeit bekommt. Man erreicht das, indem es eine gemeinsame Vereinbarung gibt, wie zB Rueckruffunktionen etc, mit denen du dann Code aus dem einen Modul aufrufst, und der ruft dann Code aus dem anderen zurueck.

Was ist das konkrete Problem, das du loesen willst?

Re: Python Dateien importieren

Verfasst: Dienstag 21. April 2020, 14:41
von nezzcarth
__deets__ hat geschrieben: Dienstag 21. April 2020, 14:32 Jein. Zirkulaere importe loesen einen Fehler aus.
Wenn ich zwei Module a.py und b.py habe, b in a importiere und a in b und anschließend a.py ausführe, geht das ohne Probleme in Python 3.8. Nach dem zweiten Import von a hört die Kette auf. Es gibt also keine endlose Schleife jedoch werden zwei separate Instanzen von a erzeugt und man kann nicht richtig auf b zugreifen. Das soll aber nicht heißen, dass zirkuläre Abhängigkeiten nicht trotzdem schlecht sind. :)

Re: Python Dateien importieren

Verfasst: Dienstag 21. April 2020, 14:57
von __deets__
Du hast recht, geht sogar mit 2.7. Es gibt diese Probleme aber, ich habe schliesslich schon genug importe lokal gemacht, um solchen Probleme zu loesen. Aber was da jetzt genau die Umstaende sind, kann ich gar nicht mehr sagen.

Re: Python Dateien importieren

Verfasst: Dienstag 21. April 2020, 15:51
von __blackjack__
@nezzcarth: Du hast da noch ein weiteres Problem zu ”normalen” zirkulären Importen beschrieben, nämlich wenn eines der beiden Module das Modul ist das als Programm ausgeführt wird. Weil nur dann `a.py` zweimal importiert wird, weil es einmal den Namen `__main__` hat und einmal den Namen `a`.

Davon abgesehen ist der Vorgang an sich recht einfach: Die Module werden einfach Zeile für Zeile ausgeführt, und eben auch die ``import``-Anweisungen.

Oft ist das auch einfach ein Entwurfsproblem und lässt sich durch *drei* Module lösen, nämlich so das Funktionalität die von den beiden ursprünglichen Modulen benötigt wird, in ein (oder mehr) Modul(e) ausgelagert wird.