我知道它可以做到,但我永远不会记得如何 .
如何在python中重新导入模块?方案如下:我以交互方式导入模块并修改它,但后来我遇到了错误 . 我修复.py文件中的错误然后我想重新导入修复模块而不退出python . 我该怎么做 ?
这应该工作:
reload(my.module)
来自Python docs
重新加载以前导入的模块 . 参数必须是模块对象,因此必须先成功导入 . 如果您使用外部编辑器编辑了模块源文件并想要在不离开Python解释器的情况下试用新版本,这将非常有用 .
如果运行Python 3.4及更高版本,请执行 import importlib ,然后执行 importlib.reload(nameOfModule) .
import importlib
importlib.reload(nameOfModule)
不要忘记使用此方法的注意事项:
重新加载模块时,将保留其字典(包含模块的全局变量) . 名称的重新定义将覆盖旧的定义,因此这通常不是问题 . 如果新版本的模块未定义旧版本定义的名称,则旧定义仍然存在 .
如果模块使用 from ... import ... 从另一个模块导入对象,则为另一个模块调用 reload() 不会重新定义从其导入的对象 - 一种方法是重新执行from语句,另一种方法是使用 import 和限定名称( module.*name* ) )而不是 .
from ... import ...
reload()
import
module.*name*
如果模块实例化类的实例,则重新加载定义类的模块不会影响实例的方法定义 - 它们继续使用旧的类定义 . 派生类也是如此 .
在python 3中, reload 不再是内置函数 .
reload
如果您使用的是python 3.4,则应使用importlib库中的reload:
import importlib importlib.reload(some_module)
如果您使用的是python 3.2或3.3,您应该:
import imp imp.reload(module)
代替 . 见http://docs.python.org/3.0/library/imp.html#imp.reload
如果您使用ipython,请务必考虑使用autoreload扩展名:
%load_ext autoreload %autoreload 2
实际上,在Python 3中,模块 imp 被标记为DEPRECATED . 好吧,至少3.4的确如此 .
imp
而应使用 importlib 模块中的 reload 函数:
importlib
https://docs.python.org/3/library/importlib.html#importlib.reload
但请注意,此库在最后两个次要版本中进行了一些API更改 .
3 回答
这应该工作:
来自Python docs
如果运行Python 3.4及更高版本,请执行
import importlib
,然后执行importlib.reload(nameOfModule)
.不要忘记使用此方法的注意事项:
重新加载模块时,将保留其字典(包含模块的全局变量) . 名称的重新定义将覆盖旧的定义,因此这通常不是问题 . 如果新版本的模块未定义旧版本定义的名称,则旧定义仍然存在 .
如果模块使用
from ... import ...
从另一个模块导入对象,则为另一个模块调用reload()
不会重新定义从其导入的对象 - 一种方法是重新执行from语句,另一种方法是使用import
和限定名称(module.*name*
) )而不是 .如果模块实例化类的实例,则重新加载定义类的模块不会影响实例的方法定义 - 它们继续使用旧的类定义 . 派生类也是如此 .
在python 3中,
reload
不再是内置函数 .如果您使用的是python 3.4,则应使用importlib库中的reload:
如果您使用的是python 3.2或3.3,您应该:
代替 . 见http://docs.python.org/3.0/library/imp.html#imp.reload
如果您使用ipython,请务必考虑使用autoreload扩展名:
实际上,在Python 3中,模块
imp
被标记为DEPRECATED . 好吧,至少3.4的确如此 .而应使用
importlib
模块中的reload
函数:https://docs.python.org/3/library/importlib.html#importlib.reload
但请注意,此库在最后两个次要版本中进行了一些API更改 .