Prevent Python aus dem Zwischenspeichern der importierten Module

Während ich mit IPython ein umfangreiches Projekt (in mehrere Dateien und Ordner aufgeteilt) in Python entwickle, habe ich Probleme mit zwischengespeicherten importierten Modulen.

Das Problem ist, dass Anweisungenimport module liest das Modul nur einmal, auch wenn sich das Modul geändert hat! Jedes Mal, wenn ich etwas in meinem Paket ändere, muss ich IPython beenden und neu starten. Schmerzlich

Gibt es eine Möglichkeit, das erneute Laden einiger Module zu erzwingen? Oder besser, um zu verhindern, dass Python sie zwischenspeichert?

Ich habe mehrere Ansätze ausprobiert, aber keiner funktioniert. Insbesondere stoße ich auf sehr, sehr seltsame Fehler, wie einige Module oder Variablen, die auf mysteriöse Weise gleich @ werdeNone ...

ie einzige vernünftige Ressource, die ich gefunden habe, istPython-Module neu laden, von Pyunit, aber ich habe es nicht überprüft. Ich hätte gerne so etwas.

Eine gute Alternative wäre ein Neustart von IPython oder ein Neustart des Python-Interpreters.

So, wenn Sie in Python entwickeln, welche Lösung haben Sie für dieses Problem gefunden?

Bearbeite

Um die Dinge klar zu machen: Ich verstehe natürlich, dass einige alte Variablen, die vom vorherigen Status des Moduls abhängen, möglicherweise erhalten bleiben. Das ist okay für mich. Warum ist es in Python so schwierig, ein Modul neu zu laden, ohne dass seltsame Fehler auftreten?

Mehr speziell, wenn ich mein gesamtes Modul in @ haeine Dateimodule.py dann funktioniert folgendes einwandfrei:

import sys
try:
    del sys.modules['module']
except AttributeError:
    pass
import module

obj = module.my_class()

Dieser Code funktioniert wunderbar und ich kann ihn entwickeln, ohne IPython monatelang zu beenden.

Jedoc, wenn mein Modul aus mehreren Submodulen besteht, bricht die Hölle los:

import os
for mod in ['module.submod1', 'module.submod2']:
    try:
        del sys.module[mod]
    except AttributeError:
        pass
# sometimes this works, sometimes not. WHY?

Warum ist das für Python so unterschiedlich, ob ich mein Modul in einer großen Datei oder in mehreren Submodulen habe? Warum würde dieser Ansatz nicht funktionieren?

Antworten auf die Frage(14)

Ihre Antwort auf die Frage