在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中重新加载模块的主要内容,如果未能解决你的问题,请参考以下文章