Python importlib动态导入模块实现代码
阅读目录
一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过importmodule或者from*importmodule的方式导入,这属于静态导入,很容易理解。
而如果当我们需要在程序的运行过程时才能决定导入某个文件中的模块时,并且这些文件提供了同样的接口名字,上面说的方式就不适用了,这时候需要使用python的动态导入。
importlib使用
如在scripts目录中保存着一些功能模块,向外提供类似的接口poc()和脚本描述信息description,需要传入一个参数target,当然脚本执行的功能是不一样的,以下只是举例:
starnight:EXP-Mstarnight$lsscripts/ __init__.py__pycache__test1.pytest2.pytest3.py starnight:EXP-Mstarnight$catscripts/test1.py #!/usr/bin/envpython #-*-coding:utf-8-*- description='itisatest1' defpoc(target): print('itisatest1') returnTrue
而我们需要动态传入脚本名,来选用此时要执行的功能:
#!/usr/bin/envpython #-*-coding:utf-8-*- importimportlib script_name=input('pleaseinputscript_name:')#手动输入脚本名 module=importlib.import_module('scripts.{}'.format(script_name))#动态导入相应模块 func=module.poc('')#执行脚本功能 print(module.description)#获取脚本描述信息
pleaseinputscript_name:test1 itisatest1 itisatest1 ... pleaseinputscript_name:test3 itisatest3 itisatest3
当我们动态给定脚本名字时,就会动态的导入该模块,执行相应的功能。
importlib其他介绍
pythondoc:importlib
importlib中的几个函数:__import__、import_module、find_loader、invalidate_caches、reload
"NoteProgrammaticimportingofmodulesshoulduseimport_module()insteadofthisfunction."
当进行编程时,使用import_module,如上使用该模块。
find_loader用来查找模块,reload重新载入模块,invalidate_caches不多介绍了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。