我知道可以做到,但是我不记得怎么做。

如何在python中重新导入模块? 场景如下:我以交互方式导入模块并对其进行修改,但随后遇到错误。 我修复了.py文件中的错误,然后想重新导入固定模块而不退出python。 我该怎么做 ?

#1楼

这应该工作:

reload(my.module)

重新加载先前导入的模块。 参数必须是模块对象,因此它必须已经成功导入。 如果您已使用外部编辑器编辑了模块源文件,并且想在不离开Python解释器的情况下尝试新版本,则这将非常有用。

如果运行Python 3.4及更高版本,请import importlib ,然后执行importlib.reload(nameOfModule) 。

不要忘记使用此方法的注意事项:

重新加载模块时,将保留其字典(包含模块的全局变量)。 名称的重新定义将覆盖旧的定义,因此这通常不是问题。 如果模块的新版本未定义旧版本定义的名称,则保留旧定义。

如果一个模块使用from ... import ...从另一个模块导入对象,则对另一个模块调用reload()不会重新定义从该模块导入的对象-解决该问题的一种方法是重新执行from语句,另一种方法是使用import名称和限定名称( module.*name* )。

如果模块实例化了一个类的实例,则重新加载定义该类的模块不会影响实例的方法定义-它们将继续使用旧的类定义。 派生类也是如此。

#2楼

在python 3中, reload不再是内置函数。

如果您使用的是python 3.4+,则应改用importlib库中的reload :

import importlib
importlib.reload(some_module)

如果您使用的是Python 3.2或3.3,则应:

import imp
imp.reload(module)

如果您使用的是ipython ,那么绝对可以考虑使用autoreload扩展名:

%load_ext autoreload
%autoreload 2

实际上,在Python 3中,模块imp被标记为DEPRECATED。 好吧,至少对于3.4是正确的。

而是应使用importlib模块中的reload函数:

但是请注意,该库在最后两个次要版本中进行了一些API更改。