Ich habe ein foo.py
def foo():
print "test"
In IPython verwende ich:
In [6]: import foo
In [7]: foo.foo()
test
Dann habe ich das geändert foo()
in:
def foo():
print "test changed"
In IPython lautet das Ergebnis für den Aufruf weiterhin test
:
In [10]: import foo
In [11]: foo.foo()
test
Dann benutze ich:
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
Ich lösche den foo.pyc
im selben Ordner foo.py
vorhandenen, aber immer noch kein Glück.
Darf ich wissen, wie ich den aktualisierten Code zur Laufzeit erneut importieren kann?
python
runtime
ipython
overloading
python-import
user478514
quelle
quelle
Antworten:
Für Python 2.x.
Für Python 3.x.
quelle
reload
ein Modul übergeben?. z.B. Sie sollten imimport foo
Voraus tunfrom foo import *
oderfrom foo import bar
das Symbolfoo
nicht definiert erhalten. Sie müssenimport sys
dannreload(sys.modules['foo'])
oder vielleichtreload(sys.modules[bar.__module__])
Zusätzlich zu Gnibblers Antwort:
Dies änderte sich in Python 3 zu:
Wie @onnodb hervorhebt,
imp
wirdimportlib
seit Python 3.4 veraltet :quelle
Die Autoreload- Funktion von IPython3 funktioniert genau richtig.
Ich verwende das aktuelle Beispiel von der Webseite. Laden Sie zuerst die Funktion "Autoreload".
Importieren Sie dann das zu testende Modul:
Öffnen Sie foo.py in einem Editor und ändern Sie some_function in return 43
Es funktioniert auch, wenn Sie die Funktion direkt importieren.
Nehmen Sie eine Änderung in some_function vor, um 43 zurückzugeben.
quelle
Wenn dies automatisch erfolgen soll, gibt es das mit iPython gelieferte Autoreload- Modul.
quelle