首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态模块导入

动态模块导入
EN

Stack Overflow用户
提问于 2018-08-15 03:30:11
回答 1查看 77关注 0票数 0

我有几个自定义的python模块,它们执行特定的功能(数据解析、计算等)。然后我有了描述模块的json配置(即模块名称、参数、函数等)。最后,我创建了一个驱动脚本,我想用它来驱动这些模块。配置或多或少被传递给驱动程序,该驱动程序命令模块基于此配置运行某些功能。我想要做的是基于这些配置,我想动态地导入这些模块,并运行基于配置提供的测试列表。配置的数量可以从1到N。测试列表可以是硬编码的,因为模块是基于模板创建的,或者是通过配置提供的。

即JsonFile:

代码语言:javascript
复制
{ <module_name>: {
    kw:<module>,
    kw:<arg1>,
    kw:<argN>
    }
 }

代码:

代码语言:javascript
复制
<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调用模块代码的问题上。我希望有一个标准的进口产品...

代码语言:javascript
复制
import <module> as <module_name>

其中module是itm,module_name是关键。通过这种方式,我可以遍历所有的键,并调用这些模块的标准函数。

也就是说,它的功能应该是这样的。

代码语言:javascript
复制
import moduleX as MX
MX.execute
import moduleY as MY
MY.execute

但要像这样编码...(伪代码)

代码语言:javascript
复制
<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 key
for mod in lst.items()
   mod.execute()

我希望这是有意义的,如果不只是评论,那么我可以根据需要进行澄清。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 04:02:19

importlib.import_module返回对导入的模块对象的引用,您只需创建一个新变量并存储它,以便能够访问成员:

代码语言:javascript
复制
x = importlib.import_module(module_name)
x.some_func()

如果您有多个名称,您可以将导入的模块存储在某个结构、列表或字典中,任何对您有意义的内容都可以:

代码语言:javascript
复制
dynamods = {}
for key, val in jsonCfg.items():
    for dctKey, itm in val.items():
        if 'IMPORT' in dctkey:
            dynamods[key] = importlib.import_module(itm) 

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

代码语言:javascript
复制
for mod in dynamods
    dynamods[mod].execute()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51848558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档