交互时重新导入模块

新手上路,请多包涵

如何重新导入模块?我想在更改 .py 文件后重新导入模块。

原文由 Stefano Borini 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 255
2 个回答

对于 Python 3.4+

 import importlib
importlib.reload(nameOfModule)

对于 Python < 3.4

 reload(my.module)

来自 Python 文档

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

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

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

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

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

原文由 Benjamin Wohlwend 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏