如何“重新导入”模块到 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.py
中存在的 foo.pyc
,但仍然没有运气。
我可以知道如何在运行时重新导入更新的代码吗?
I have a foo.py
def foo():
print "test"
In IPython I use:
In [6]: import foo
In [7]: foo.foo()
test
Then I changed the foo()
to:
def foo():
print "test changed"
In IPython, the result for invoking is still test
:
In [10]: import foo
In [11]: foo.foo()
test
Then I use:
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
I delete the foo.pyc
in same folder foo.py
exists, but still no luck.
May I know how to reimport the updated code in runtime?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
对于 Python 2.x
对于 Python 3.x
For Python 2.x
For Python 3.x
IPython3 的 autoreload 功能运行得很好。
我正在使用网页上的实际示例。首先加载“自动重新加载”功能。
然后导入要测试的模块:
在编辑器中打开 foo.py 并将 some_function 更改为 return 43
如果直接导入该函数也可以。
更改 some_function 以返回 43。
IPython3's autoreload feature works just right.
I am using the actual example from the webpage. First load the 'autoreload' feature.
Then import the module you want to test:
Open foo.py in an editor and change some_function to return 43
It also works if you import the function directly.
Make change in some_function to return 43.
除了 gnibbler 的回答之外:
这在 Python 3 中更改为:
正如 @onnodb 指出的那样,自 Python 3.4 以来,
imp
已被弃用,取而代之的是importlib
:In addition to gnibbler's answer:
This changed in Python 3 to:
As @onnodb points out,
imp
is deprecated in favor ofimportlib
since Python 3.4:如果您希望这种情况自动发生,可以使用 autoreload 模块iPython 附带的。
If you want this to happen automatically, there is the autoreload module that comes with iPython.
在 [15] 中,使用
del foo
从模块缓存中删除 foo
In [15] instead of
del foo
, useto delete foo from the module cache