如何重新导入模块?我想在更改 .py 文件后重新导入模块。
原文由 Stefano Borini 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 python 3 中, reload
不再是内置函数。
如果您使用的是 python 3.4+,则应该使用 reload
importlib
代替:
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
原文由 Andrew 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答861 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
对于 Python 3.4+ :
对于 Python < 3.4 :
来自 Python 文档
不要忘记使用此方法的注意事项:
重新加载模块时,会保留其字典(包含模块的全局变量)。名称的重新定义将覆盖旧定义,因此这通常不是问题,但如果模块的新版本未定义旧版本定义的名称,则旧定义不会被删除。
如果一个模块使用
from ... import ...
从另一个模块导入对象,调用reload()
因为另一个模块不会重新定义从它导入的对象——解决这个问题的一种方法是重新执行from
语句,另一个是使用import
和限定名称(module.*name*
)代替。如果一个模块实例化了一个类的实例,重新加载定义类的模块不会影响实例的方法定义——它们继续使用旧的类定义。派生类也是如此。