Saya punya foo.py
def foo():
print "test"
Di IPython saya menggunakan:
In [6]: import foo
In [7]: foo.foo()
test
Kemudian saya mengubah foo()
menjadi:
def foo():
print "test changed"
Di IPython, hasil pemanggilan masih test
:
In [10]: import foo
In [11]: foo.foo()
test
Kemudian saya menggunakan:
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
Saya menghapus foo.pyc
di folder yang sama foo.py
ada, tetapi masih tidak berhasil.
Bolehkah saya tahu cara mengimpor ulang kode yang diperbarui dalam runtime?
python
runtime
ipython
overloading
python-import
pengguna478514
sumber
sumber
Jawaban:
Untuk Python 2.x
Untuk Python 3.x
import importlib import foo #import the module here, so that it can be reloaded. importlib.reload(foo)
sumber
reload
modul ?. misalnya. Anda harus melakukanimport foo
sebelumnyafrom foo import *
ataufrom foo import bar
, simbolfoo
tidak dapat ditentukan. Anda perluimport sys
kemudianreload(sys.modules['foo'])
atau mungkinreload(sys.modules[bar.__module__])
Selain jawaban gnibbler:
Ini berubah di Python 3 menjadi:
>>> import imp >>> imp.reload(foo)
Seperti yang ditunjukkan oleh @onnodb,
imp
sudah tidak digunakan lagiimportlib
sejak Python 3.4:>>> import importlib >>> importlib.reload(foo)
sumber
IPython3 ini autoreload fitur bekerja tepat.
Saya menggunakan contoh sebenarnya dari halaman web. Pertama muat fitur 'muat otomatis'.
In []: %load_ext autoreload In []: %autoreload 2
Kemudian impor modul yang ingin Anda uji:
In []: import foo In []: foo.some_function() Out[]: 42
Buka foo.py di editor dan ubah some_function untuk mengembalikan 43
In []: foo.some_function() Out[]: 43
Ini juga berfungsi jika Anda mengimpor fungsi secara langsung.
In []: from foo import some_function In []: some_function() Out[]: 42
Buat perubahan di some_function untuk mengembalikan 43.
In []: some_function() Out[]: 43
sumber
Jika Anda ingin ini terjadi secara otomatis, ada modul autoreload yang disertakan dengan iPython.
sumber