Seite 1 von 1

Modul per __import__ erneut einbinden - mit anderem Inhalt

Verfasst: Dienstag 24. Juni 2008, 11:58
von astraios
Hallo,

ich hab da ein kleines Problem betreffend Import von Modulen:

Ich importiere dynamisch Module aus einem bestimmten Verzeichnis.
Dafür verwende ich __import__.

Jetzt kann es durchaus vorkommen, dass ich ein Modul (z.B. "ModulA") lade und eine Klasse aus diesem Modul instanziiere und benutze. Irgendwann lösch ich die Instanz. In der Zwischenzeit ändert sich der Code in diesem ModulA. Jetzt möchte ich es erneut importieren und eine Instanz der nun geänderten Klasse erstellen.

Und das klappt nicht. Nach dem Ändern des Modul-Codes und dem erneuten Aufruf von __import__('ModulA') habe ich noch das Verhalten des alten Modul-Codes.
Ursache ist wahrscheinlich, dass Python dann bereits ein Modul mit diesem Namen kennt und es deshalb nicht mehr neu importiert - das ist aber für meinen Fall blöd.
Wie kann ich Python dazu bewegen, dieses geänderte Modul zu verwenden? Kann ich dazu vorher das "alte" Modul "deportieren"? Oder überschreiben? Und wie kann ich prüfen, ob ein bestimmtes Modul bereits bekannt ist?

Vielen Dank schonmal im Voraus! :)

Verfasst: Dienstag 24. Juni 2008, 12:00
von mitsuhiko
Module werden in sys.modules gecacht. Wenn du es dort raulöscht wird es neu geladen. Das ist auch das, was reload() macht.

Verfasst: Dienstag 24. Juni 2008, 15:29
von astraios
Vielen Dank für die schnelle Antwort! Klappt gut mit reload().

Danke!