在交互式 Python 会话中撤销/重做/刷新 `import`

3 投票
1 回答
2465 浏览
提问于 2025-04-16 23:09

可能重复的问题:
如何卸载(重新加载)一个Python模块?

在Python中,有没有办法“刷新”一个已经导入的模块?我的使用场景是:我想在交互式环境中不断改进这个模块;到目前为止,我每次都要完全重启交互会话来重新加载我更新的代码。

有没有更好的方法呢?

1 个回答

5

假设你已经在命名空间里有一个叫 foo 的模块,但你对源代码做了一些修改,现在想要导入新的代码,可以使用:

reload(foo)

这里有个小问题:如果你使用了 from foo import bar 并且之后对函数 bar 进行了修改,那么重新加载是不会生效的。在这种情况下,你可能更想用 import foo,然后调用 foo.bar(),这样你就可以通过 reload 让修改立即生效。

如果你经常在这样的交互式环境中工作,或许你会想用 ipython,并在你的 ipy_user_conf.py 文件中添加以下几行:

# For autoreloading of modules (%autoreload, %aimport)    
import ipy_autoreload

撰写回答