如何“重新导入”模块到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附带了自动重新加载模块。