如何“重新导入”模块到Python然后代码被导入后被改变
我有一个foo.py
def foo(): print "test"
在IPython中我使用:
In [6]: import foo In [7]: foo.foo() test
然后我把foo()
改为:
def foo(): print "test changed"
在IPython中,调用的结果仍然是test
:
In [10]: import foo In [11]: foo.foo() test
然后我使用:
In [15]: del foo In [16]: import foo In [17]: foo.foo() test
我删除foo.pyc
在同一个文件夹foo.py
存在,但仍然没有运气。
我可以知道如何重新导入运行时更新的代码?
foo = reload(foo)
除了gnibbler的回答:
这在Python 3中更改为:
>>> import imp >>> imp.reload(foo)
正如@onnodb所指出的那样,从Python 3.4开始, imp
已经被赞成importlib
:
>>> import importlib >>> importlib.reload(foo)
IPython3的自动重载function正常工作。
我正在使用网页中的实际示例。 首先加载“自动重载”function。
In []: %load_ext autoreload In []: %autoreload 2
然后导入你想testing的模块:
In []: import foo In []: foo.some_function() Out[]: 42
在编辑器中打开foo.py并将some_function更改为43
In []: foo.some_function() Out[]: 43
如果直接导入函数,它也可以工作。
In []: from foo import some_function In []: some_function() Out[]: 42
在some_function改变返回43。
In []: some_function() Out[]: 43
如果您希望自动执行此操作,那么iPython附带了自动重新加载模块。