Python动态导入模块:importlib实战与核心函数解析
本文详解Python中importlib库在动态导入模块中的应用。通过对比静态导入,阐述如何在运行时根据输入动态加载指定脚本并执行接口。重点解析import_module、find_loader及reload等核心函数的使用场景,结合代码示例展示如何安全、灵活地实现模块化功能调用。
阅读目录
静态导入与动态导入的区别
通常情况下,当我们需要使用某些功能模块(包括内置模块或自定义模块)时,可以直接采用 import module 或 from * import module 的方式进行导入。这种静态导入方式直观且易于理解,是Python开发中的基础操作。
然而,若需要在程序运行过程中动态决定加载哪个文件中的模块,且这些模块提供了相同的接口名称,上述静态导入方式便不再适用。此时,必须借助Python的动态导入机制来实现灵活的功能调用。
importlib动态导入实战
importlib使用
假设在 scripts 目录中存放着多个功能模块,它们向外提供类似的接口 poc() 以及脚本描述信息 description,并且需要传入一个参数 target。虽然各脚本执行的具体功能不同,但以下示例仅用于演示其结构:
starnight:EXP-M starnight$ ls scripts/
__init__.py __pycache__ test1.py test2.py test3.py
starnight: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 importlib
script_name = input('please input script_name : ') # 手动输入脚本名
module = importlib.import_module('scripts.{}'.format(script_name)) # 动态导入相应模块
func = module.poc('') # 执行脚本功能
print(module.description) # 获取脚本描述信息
please input script_name : test1
it is a test1
it is a test1
...
please input script_name : test3
it is a test3
it is a test3
当动态指定脚本名称时,系统将自动导入该模块并执行相应的功能逻辑。
importlib核心函数解析
importlib其他介绍 python doc: importlib
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 的功能在此不再赘述。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









