Ich liebe ipython, aber ich habe ein Problem mit% run entdeckt: importierte Module werden nicht neu geladen, wenn% run wiederholt aufgerufen wird.ipython: Module bei Verwendung von% run neu importieren
Angenommen Datei ex1.py enthält die folgenden Zeilen:
import ex2
ex2.x.append(1)
print ex2.x
Und Datei ex2.py enthält:
x = []
Nun Python ex1.py von der Linie wiederholt Befehl ausführen druckt [1] jedes Mal. Aber das Aufrufen von %run ex1.py
aus ipython wiederholt wiederholt [1], [1,1], [1,1,1] usw. Dies liegt daran, dass Modul ex2.py nicht neu geladen wird. Wir haben also ein Problem: Das ipython run-script-Protokoll spiegelt nicht das "reale" Verhalten wider.
Hinweis:
%load_ext autoreload
%autoreload 2
tut nicht Hilfe. Bei diesen Zeilen wird ex2.py nur dann neu geladen, wenn eine Änderung an der Datei ex2.py vorgenommen wurde. Wenn wir keine Änderungen vornehmen oder nur Änderungen an ex1.py vornehmen, erhalten wir das unerwünschte Verhalten.
Gibt es eine Möglichkeit,% run wie die Befehlszeile hier zu verhalten? Dies scheint ein echter Mangel bei der Verwendung von ipython als Testumgebung für Skripte zu sein. (Oder vielleicht ist die Moral, dass ein Modul nicht in eine anderen Modul Namensraum zu schreiben werden?)