如何在控制台中轻松 reload/reimport 模块

How to easily reload/reimport a module while working in a console

在处理模块时,我使用 repl(python 控制台)来测试功能。

我要解决的问题是轻松地重新加载模块并在修改后重新导入模块对象。

举个例子说明问题。

在控制台中,我开始测试包 a.b.c

中的一个函数
>>> from a.b.c import *
>>> myFunction(1)
wrong answer

我返回文本编辑器并修复 myFunction 现在我想重新测试它(我不想杀死 repl 并重新启动它,因为我可能有一些我想重用的测试变量)

所以我必须这样做:

>>> import a.b.c
>>> from importlib import reload
>>> reload(a.b.c)
>>> from a.b.c import *
>>> myFunction(1)
hopefully the right answer

我想编写一个函数来一次性完成重新加载和重新导入 *。

理想情况下,我想用

之类的东西替换之前的会话
>>> myTestReload(a.b.c)
>>> myFunction(1)
hopefully the right answer

在 myTestReload() 函数中,我可以使用 reload(a.b.c) 重新加载修改后的模块,但我没有找到一种方法来执行与 from a.b.c import *

等效的方法

这将重置 globals 这里是 itertools 的示例。

import itertools
from itertools import *
from importlib import reload

itools = reload(itertools)

for k, v in itools.__dict__.items():
    if k in globals():
            globals()[k] = v