为了账号安全,请及时绑定邮箱和手机立即绑定

动态模块导入

动态模块导入

杨__羊羊 2021-05-19 10:09:31
我有几个执行特定功能(数据解析,计算等)的自定义python模块。然后,我有描述模块的json配置(即模块名称,参数,函数等)。最后,我要创建一个驱动程序脚本,以驱动这些模块。配置或多或少地传递给驱动程序,驱动程序命令模块基于此配置运行某些功能。我想要做的是基于这些配置,我想动态导入这些模块并遍历基于配置提供的测试列表。配置的数量可以在1到N之间。由于模块是基于模板创建的或通过配置提供的,因此测试列表将被硬编码。即JsonFile:{ <module_name>: {    kw:<module>,    kw:<arg1>,    kw:<argN>    } }代码:<parse json code>for key,val in jsonCfg.items():    lst.append(key)    for dctKey, itm in val.items():        if 'IMPORT' in dctkey:            importlib.import_module(itm)这就是到目前为止我所掌握的基础知识。现在,我陷入了如何命令python调用该模块代码的困境。我希望有类似标准进口的东西...import <module> as <module_name>其中module是itm,而module_name是键。这样,我就可以遍历所有密钥,并调用这些模块的标准功能。即它应该像这样...import moduleX as MXMX.executeimport moduleY as MYMY.execute但是被编码为...(伪代码)<parse json code>for key,val in jsonCfg.items():    lst.append(key)    for dctKey, itm in val.items():        if 'IMPORT' in dctkey:            importlib.import_module(itm) as keyfor mod in lst.items()   mod.execute()我希望这是有道理的,即使不仅仅是评论,我也可以根据需要进行澄清。
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

importlib.import_module 返回引用的导入模块对象,您只需创建一个新变量并将其存储即可访问成员:


x = importlib.import_module(module_name)

x.some_func()

如果您有多个名称,则可以将导入的模块存储在某种结构,列表或字典中,这对您来说很有意义:


dynamods = {}

for key, val in jsonCfg.items():

    for dctKey, itm in val.items():

        if 'IMPORT' in dctkey:

            dynamods[key] = importlib.import_module(itm) 

然后,您可以使用它来调用函数:


for mod in dynamods

    dynamods[mod].execute()


查看完整回答
反对 回复 2021-05-25
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号