博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python importlib动态导入模块
阅读量:5150 次
发布时间:2019-06-13

本文共 1400 字,大约阅读时间需要 4 分钟。

  一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易理解。

  而如果当我们需要在程序的运行过程时才能决定导入某个文件中的模块时,并且这些文件提供了同样的接口名字,上面说的方式就不适用了,这时候需要使用python 的动态导入。

importlib使用

  如在scripts目录中保存着一些功能模块,向外提供类似的接口poc()和脚本描述信息description,需要传入一个参数target,当然脚本执行的功能是不一样的,以下只是举例:

starnight:EXP-M starnight$ ls scripts/__init__.py     __pycache__     test1.py        test2.py        test3.pystarnight:EXP-M starnight$ cat scripts/test1.py #!/usr/bin/env python# -*- coding:utf-8 -*-description = 'it is a test1'def poc(target):    print('it is a test1')    return True

  而我们需要动态传入脚本名,来选用此时要执行的功能:

#!/usr/bin/env python# -*- coding:utf-8 -*-import importlibscript_name = input('please input script_name : ')     # 手动输入脚本名               module = importlib.import_module('scripts.{}'.format(script_name))    # 动态导入相应模块func = module.poc('')      # 执行脚本功能print(module.description)    # 获取脚本描述信息
please input script_name : test1it is a test1it is a test1...please input script_name : test3it is a test3it is a test3

  当我们动态给定脚本名字时,就会动态的导入该模块,执行相应的功能。

importlib其他介绍

  python doc: 

  importlib中的几个函数:__import__、import_module、find_loader、invalidate_caches、reload

"Note Programmatic importing of modules should use import_module() instead of this function."

  当进行编程时,使用import_module,如上使用该模块。

  find_loader用来查找模块,reload重新载入模块,invalidate_caches不多介绍了。

 

转载于:https://www.cnblogs.com/Hi-blog/p/8529297.html

你可能感兴趣的文章
Program exited with code **** 相关解释
查看>>
装服务器,测试数据库,简单的maven命令
查看>>
升级Firefox8后watir-webdriver出现错误“unable to obtain stable firefox connection in 60 seconds”...
查看>>
第6章 Overlapped I/O, 在你身后变戏法 ---被激发的 Event 对象 -4
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
001.RAID简介
查看>>
投标项目的脚本练习2
查看>>
第五次实验
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
runtime的基本应用
查看>>
关于scrollTop的那些事
查看>>
Caroline--chochukmo
查看>>
算法导论笔记 第8章 线性时间排序
查看>>
利用jquery的contains实现搜索功能
查看>>
Xcode 6.2 beta 3 太难下载!下载了,不敢独享
查看>>
并发编程
查看>>
Bootstrap
查看>>
C语言错误: HEAP CORRUPTION DETECTED
查看>>
【Java基础】Java类的加载和对象创建流程的详细分析
查看>>