Neuladen einer geänderten Python-Datei in der Emacs-Python-Shell

7

In der Python-Shell von emacs (ich verwende 2. * Python) importiere ich eine .py-Datei, mit der ich arbeite, und teste den Code. Wenn ich den Code ändere, bin ich mir nicht sicher, wie ich ihn wieder importieren soll.

Aus meiner bisherigen Lektüre scheint das

zu sein %Vor%

sollte funktionieren, scheint es aber nicht.

Vielleicht reicht es einfach, die Python-Shell herunterzufahren und neu zu starten, gibt es dafür einen Befehl oder Sie tun es einfach manuell?

edit: Es sieht aus wie python-send-defun und python-send-buffer wäre ideal, aber Änderungen scheinen sich nicht zu verbreiten.

    
justinhj 29.11.2009, 18:49
quelle

3 Antworten

5

Es scheint für mich zu funktionieren:

Erstellen Sie eine Datei (in Ihrem PYTHONPATH) namens test.py

%Vor%

Geben Sie dann in der Python-Shell von emacs (oder noch besser in der ipython-Shell)

ein %Vor%

Ändern Sie nun test.py:

%Vor%     
unutbu 29.11.2009, 19:11
quelle
15

Während reload() funktioniert, ändert es die Verweise auf Klassen, Funktionen und andere Objekte nicht, daher ist es einfach, eine alte Version zu sehen. Eine konsistenteste Lösung besteht darin, reload() entweder durch exec zu ersetzen (was bedeutet, dass nicht import an erster Stelle verwendet wird) oder den Interpreter vollständig neu zu starten.

Wenn Sie das Reload weiterhin verwenden möchten, achten Sie sehr darauf, wie Sie von diesem Modul aus referenzieren, und verwenden Sie immer den vollständigen Namen. Z.B. import module und verwende module.name anstelle von from module import name . Und selbst wenn Sie vorsichtig sind, werden Sie immer noch Probleme mit alten Objekten bekommen, was ein Grund ist, dass reload() nicht in 3.x ist.

    
Roger Pate 29.11.2009 19:06
quelle
0

Nachdem ich dieses Thema für eine ziemlich lange Zeit betrachtet habe, bin ich zu dem Schluss gekommen, dass die beste Lösung entweder eine Initialisierungsdatei Ihres Python-Interpreters (zB ipython) oder die Verwendung des Python-Builds ist -in Modul "imp" und seine Funktion "reload". Zum Beispiel am Anfang Ihres Codes:

%Vor%

Diese Lösung kam von dieser Seite zu mir: Ссылка

    
Robin Tournemenne 03.02.2018 15:27
quelle

Tags und Links