logo

Neuladen von Modulen in Python

Wir erhalten einen Fall, in dem wir ein Python-Modul aktualisieren und testen möchten, ohne den Interpreter neu zu starten. Dies ist besonders hilfreich während der Entwicklung, wenn Sie Moduldateien extern ändern und möchten, dass diese Änderungen sofort wirksam werden. Mit Python können wir ein zuvor importiertes Modul mithilfe der Funktion reload() neu laden. Zum Beispiel Wenn Sie eine Dienstprogrammdatei utils.py bearbeitet haben, während Ihr Skript ausgeführt wird, können Sie durch das Neuladen den aktualisierten Inhalt erneut importieren, ohne die Python-Shell neu starten zu müssen.

Wann sollten Sie ein Modul neu laden?

  • Während des Debuggens oder Live-Tests
  • Bei Verwendung interaktiver Interpreter wie IPython oder Jupyter
  • Bei der Entwicklung von Plugins oder modularen Systemen
  • Um in externen .py-Dateien vorgenommene Änderungen widerzuspiegeln, ohne die Sitzung neu zu starten

Neuladen von Modulen in Python 2.x

In Python 2.x können Sie die integrierte Funktion reload() direkt verwenden, um ein zuvor importiertes Modul neu zu laden.

Python
import mymodule # Modify 'mymodule.py' externally here... reload(mymodule) 

Erläuterung:



  • mymodule wird zuerst mit import importiert.
  • Nachdem Sie externe Änderungen an mymodule.py vorgenommen haben, lädt der Aufruf von reload(mymodule) die aktualisierte Version neu, ohne den Interpreter neu zu starten.
  • Kein erneuter Import erforderlich – reload() funktioniert mit einem bereits importierten Modulobjekt.

Neuladen von Modulen in Python 3.0 bis 3.3

In den Python-Versionen 3.0 bis 3.3 wurde die integrierte Funktion reload() entfernt. Stattdessen müssen Sie es aus dem imp-Modul importieren.

Python
import mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule) 

Erläuterung:

  • Zuerst wird mymodule wie gewohnt importiert.
  • Das imp-Modul stellt in diesem Versionsbereich die Funktion reload() bereit.
  • Nach der Bearbeitung von mymodule.py lädt imp.reload(mymodule) das Modul mit aktualisierten Änderungen neu.

Hinweis: Das imp-Modul ist ab Python 3.4 veraltet und wird durch importlib ersetzt.

Neuladen von Modulen in Python 3.4 und höher

Ab Python 3.4 wird zum Neuladen eines Moduls die Verwendung von importlib.reload() empfohlen.

Python
import mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule) 

Erläuterung:

  • mymodule wird zunächst normal importiert.
  • Dann lädt importlib.reload(mymodule) das aktualisierte Modul neu.
  • Dies ist die aktuelle und offizielle Möglichkeit, Module in Python 3.4+ neu zu laden.

Hinweis: Verwenden Sie diese Methode in allen modernen Python-Skripten und Notebooks, wenn Sie Moduländerungen testen.

Können Sie ein Modul in Python entladen?

Derzeit bietet Python keine integrierte Möglichkeit, ein Modul nach dem Import vollständig zu entladen. Sobald ein Modul in den Speicher geladen wurde, bleibt es in sys.modules verfügbar, bis das Programm beendet wird. Obwohl Sie ein Modul aus sys.modules löschen können, garantiert dies nicht, dass es vollständig aus dem Speicher entfernt wird oder dass seine Referenzen verschwunden sind:

Python
import mymodule import sys del sys.modules['mymodule'] 


Dadurch wird das Modul nur aus dem sys.modules-Cache entfernt. Wenn eine Variable oder ein Objekt noch auf das Modul verweist, wird es nicht vollständig entladen.

Warum wird das Entladen nicht unterstützt?

  • Python verwaltet Module global im Speicher.
  • Das dynamische Entladen kann zu inkonsistentem Verhalten führen, wenn Teile Ihres Codes noch Verweise auf das alte Modul enthalten.