588 Stimmen

Reimport eines Moduls in Python im interaktiven Betrieb

Ich weiß, dass es möglich ist, aber ich weiß nicht mehr, wie das geht.

Wie kann man ein Modul in Python reimportieren? Das Szenario ist wie folgt: Ich importiere ein Modul interaktiv und bastle daran herum, aber dann tritt ein Fehler auf. Ich behebe den Fehler in der .py-Datei und möchte dann das reparierte Modul wieder importieren, ohne Python zu beenden. Wie kann ich das tun?

1voto

skasch Punkte 91

Obwohl die bereitgestellten Antworten für ein bestimmtes Modul funktionieren, werden sie keine Untermodule neu laden, wie in Diese Antwort :

Wenn ein Modul Objekte aus einem anderen Modul importiert, indem es from ... import ... , Aufruf reload() für das andere Modul definiert die von ihm importierten Objekte nicht neu - eine Möglichkeit, dies zu umgehen, ist die erneute Ausführung der from-Anweisung, eine andere ist die Verwendung von import und qualifizierte Namen ( module.*name* ) statt.

Wenn Sie jedoch die __all__ Variable zur Definition der öffentlichen API ist es möglich, alle öffentlich verfügbaren Module automatisch neu zu laden:

# Python >= 3.5
import importlib
import types

def walk_reload(module: types.ModuleType) -> None:
    if hasattr(module, "__all__"):
        for submodule_name in module.__all__:
            walk_reload(getattr(module, submodule_name))
    importlib.reload(module)

walk_reload(my_module)

Die in der vorangegangenen Antwort genannten Vorbehalte sind jedoch nach wie vor gültig. Insbesondere ist das Ändern eines Submoduls, das nicht Teil der öffentlichen API ist, wie in der __all__ Variable wird durch ein Neuladen mit dieser Funktion nicht beeinträchtigt. Ebenso wird das Entfernen eines Elements eines Submoduls nicht durch ein Neuladen reflektiert.

-1voto

Aldrin Punkte 1
import sys

del sys.modules['module_name']
import module_name

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X