python动态导入模块

来源:转载

目的是为了实现从配置文件切换运行时应该应用的模块,用C#的时候其实挺复杂的,因为是静态语言,所以要动态切换那就只有用反射了,python就容易多了,只要在运行的代码前动态import一下,就可以达到目的了

假设有一个包“mypackage”,里面有三个module:md01.py, md02.py和md03.py,里面实现的是同一个方法

def getstr(): return "from md01/2/3"

其中123因moudle不同而不同

那么我们怎么用?

from xml.dom import minidomif __name__=="__main__": #假定一个xml配置文件,读取moudle节点 xml='''<?xml version="1.0"?><root><moudle>md03</moudle></root>''' p=minidom.parseString(xml) mdname=p.getElementsByTagName("moudle")[0].firstChild.data mymod=__import__("mypackage."+mdname,fromlist=["*"])#fromlist很重要 print mymod.getstr()

测试过程中,唯一忽略的就是__import__里面的fromlist参数,结果怎么也得不到模块,只能得到包,原因就是要在fromlist里面把可能参与导入的模块名要写进去,

这是一个很赞的设计,假如你这个包非常庞大,但你只需要几个模块参与,你就把那几个模块名写进去就可以了

假如导入的是自己的包里的模块,那么fromlist为空或者送该参数即可

绿色通道:好文要顶关注我收藏该文与我联系

分享给朋友:
您可能感兴趣的文章:
随机阅读: