在python中重新加载模块

Posted

技术标签:

【中文标题】在python中重新加载模块【英文标题】:Reload module in python 【发布时间】:2012-10-19 19:07:24 【问题描述】:

当我使用 myModules 字典从文件 myModule.py 导入类 MyClass 时,我会这样做

from myModules.myModule import MyClass

我对文件myModue.py 进行更改后如何重新加载此模块?以下是一些误判:

reload(MyClass) # TypeError: reload() argument must be module
reload(myModule) # NameError: name 'myModule' is not defined
reload(myModules.myModule)  # NameError: name 'myModules' is not defined

【问题讨论】:

Python: reload component Y imported with 'from X import Y'? 的可能重复项 @TokenMacGuy 的回答是否遗漏了什么?如果没有,你应该接受它。 【参考方案1】:

您必须有一个模块才能重新加载。当您使用from foo import bar 时,除非bar 是一个模块(在您的情况下看起来不是),否则您将不得不使用另一个导入语句。

from myModules.myModule import myClass
# this will cause myModule.py to be evaluated.  only myClass is in scope

from myModules import myModule
# since myModule has already been imported, myModule.py is not evaluated again. 
# but now myModule is in scope.

reload(myModule)
# this will cause myModule.py to be evaluated again.

如果由于某种原因您不想要两个导入,也可以在 sys.modules 中找到已导入的模块

【讨论】:

像我一样导入类时是否认为风格不好?还是没关系? 风格不错。这取决于您需要从导入中获得什么。如果只需要 MyClass,则只导入 MyClass。如果您需要 MyModule 中的所有内容,请导入 MyModule(并使用 MyModule.MyClass 访问 MyClass) 我个人更喜欢总是导入模块,但这不是原因。使用模块可以让你避免循环导入的麻烦,也可以减少读者跟踪的全局名称的总数。如果您担心您的导入如何与reload() 交互,那么您可能正在做错了什么,只有在交互式编程时才合理有用,以重新加载您已更改的模块内容。跨度>

以上是关于在python中重新加载模块的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 3.4 中重新加载模块 [重复]

如何在 Python 中重新加载模块的函数?

在 Python 中重新加载现实生活中的模块?

Python 重新加载模块

如何在烧瓶中重新加载python模块?

如何在 IDLE 中重新加载 Python 模块?