如何重新加载使用`从模块导入*`导入的Python模块
我在这个有用的问答中看到,可以使用reload(whatever_module)或者在Python 3中使用imp.reload(whatever_module) 。 
 我的问题是,如果我from whatever_module import *中导入了什么呢? 然后,我没有whatever_module来引用当我使用reload() 。 你们会因为把整个模块扔到全局命名空间而嚷嚷吗?  🙂 
我同意“一般不这样做”的共识,但…
正确的答案是:
 import X reload( X ) from X import Y # or * for that matter 
 切勿使用import * ; 它破坏了可读性。 
另外,请注意,重新加载模块几乎是没有用的。 你不能预测你的程序在重新加载模块之后会以什么状态出现,所以这是一个很好的方法来获得难以理解的,不可再生的错误。
一个
 from module import * 
 从module获取所有“导出”对象,并将它们绑定到模块级别(或任何范围内的级别)名称。 您可以重新加载模块: 
 reload(sys.modules['module']) 
但是这对你没有任何好处:无论你的范围是什么级别的名字仍然指向旧的对象。
 当from whatever_module import whatever使用from whatever_module import whatever , whatever是作为导入模块的一部分计算,所以要重新加载它 – 你应该重新加载你的模块。 但是重新加载你的模块,你仍然会得到旧的whatever – 从已经导入的whatever_module ,所以你需要重新加载(whatever_module),并重新加载你的模块: 
 # reload(whatever_module), if you imported it reload(sys.modules['whatever_module']) reload(sys.modules[__name__]) 
 如果你使用from whatever_module import whatever你也可以考虑 
 whatever=reload(sys.modules['whatever_module']).whatever 
要么
 whatever=reload(whatever_module).whatever 
 import re for mod in sys.modules.values(): if re.search('name', str(mod)): reload(mod)