递归版本的'reload'

12 浏览
0 Comments

递归版本的'reload'

在开发Python代码时,我通常会在解释器中以特定的方式进行测试。我会import some_module,进行测试,发现一个bug,修复bug并保存,然后使用内置的reload函数来reload(some_module)并再次进行测试。

然而,假设在some_module中我有import some_other_module,并且在测试some_module时我发现了some_other_module中的一个bug并进行了修复。现在调用reload(some_module)不会递归地重新导入some_other_module。我必须手动重新导入依赖项(例如通过reload(some_module.some_other_module)或者import some_other_module; reload(some_other_module)),或者如果我改变了一大堆依赖项并且忘记了需要重新加载哪些模块,我需要重新启动整个解释器。

更方便的做法是如果有一个recursive_reload函数,我只需要执行recursive_reload(some_module),Python不仅重新加载some_module,还递归地重新加载some_module导入的每个模块(以及每个这些模块导入的模块,依此类推),这样我就可以确保我没有使用some_module依赖的任何其他模块的旧版本。

我认为Python中没有内置的行为类似于我在这里描述的recursive_reload函数,但是否有一种简单的方法来组合这样的功能?

0