python中importlib实现模块的动态导入

  一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过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.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')

</span><span style="color: rgba(0, 0, 255, 1)">return</span> True</pre>
复制代码
复制代码

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

复制代码
复制代码
#!/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其他介绍

  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不多介绍了。

 

posted @   慆慢险躁  阅读(352)  评论(1编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示