python importlib 用法小结

 更新时间:2026年02月08日 10:35:35   作者:YunfengWang  
在使用Python的时候,大部分时候引入包,都是通过import语句,通过这个库,可以根据程序中的变量动态地导入模块,而不是像传统导入方式那样使用固定的字符串,这使得代码更加灵活,感兴趣的可以了解一下

在使用Python的时候,大部分时候引入包,都是通过import 语句,比如

import numpy as np

有时候为了更复杂的需求,我们需要用程序化的方式来引入包 (Programmatic Importing), 比如根据输入不同,选择执行两个不同包里面的同名函数,这时候就需要用到importlib这个库了。这里先从一个简单例子开始,逐渐深入地讲一下这个库的用法。

import_module用法

importlib 是Python3.1增加的系统库,其中最常用的函数是其中的import_module ,功能是用程序语句的方式替代import 语句,用法如下:

import importlib

# 与 import time 效果一样
time = importlib.import_module('time')
print(time.time())

# 与 import os.path as path 效果一样
path = importlib.import_module('os.path')
path.join('a', 'b')  # results: 'a/b'

# 相对引入, 一级目录,与 import os.path as path 效果一样
path = importlib.import_module('.path', package='os')
path.join('a', 'b')  # results: 'a/b'

# 相对引入,二级目录,与 import os.path as path 效果一样
path = importlib.import_module('..path', package='os.time')
path.join('a', 'b')  # results: 'a/b'

注意最后的例子中,相对引入时需要在前面增加.

或者.. 来表示相对目录,如果直接使用importlib.import_module('path', package='os') 会报错。

如果光看这几个例子的话,貌似跟import 没什么区别,而且语句变得更复杂了,有点多此一举的感觉。

其实不是的,个人认为,importlib 的强大之处是将import 语句中写死的字面值改成了import_module 函数中的参数,因此可以通过修改参数在外部用变量来控制实际import的包或者模块,大大地增加了灵活性。 下面会举一个稍微实用一些的例子。

一个实际例子

假设我们在设计一个深度学习工具库,里面包含了N个网络模型(ResNet50, HRNet, MobileNet等等),每个模型的实现都有一个load_model 的函数。由于计算设备的性能不同,需要调用的网络结构也会变化,我们需要根据外部传入的参数来判断实际load哪一个模型。

虽然采用import 语句+if-else 判断也能完成这个需求,举例实现如下:

def run(model_name, input):
    if model_name == 'resnet_50':
        from resnet_50.model import load_model
    elif model_name == 'hrnet':
        from hrnet.model import load_model
    elif model_name == 'moblienet':
        from mobilenet.model import load_model

    model = load_model()
    output = model(input)
    return output

这种写法存在下面的两个问题:

  1. 写法很冗余, N个模型的话需要添加2N条语句
  2. 新增模型时需要修改调用处的代码,添加对应的import语句,不符合模块化的要求。

这时候采用importlib 就能比较简洁地解决这个问题:

import importlib


def run(model_name, input):
    load_model = importlib.import_module('load_model', package='{}.model'.format(model_name))

    model = load_model()
    output = model(input)
    return output

可以看到在这种场景下importlib 确实能大大简化代码。

了解这些内容,日常使用这个库就没什么问题了(好像importlib 针对普通用户场景的函数貌似就只有import_module 这一个),别的一些进阶的概念由于不太懂,暂时不展开了。

参考

  1. https://docs.python.org/3/library/importlib.html

 到此这篇关于python importlib 用法小结的文章就介绍到这了,更多相关python importlib 用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 封装Detours用于Python中x64函数hook详解

    封装Detours用于Python中x64函数hook详解

    Detours是微软发布的一个API hook框架,同时支持x86和x64,看文档说也支持ARM和ARM64的Windows,这篇文章主要介绍了封装Detours用于Python中x64函数hook,需要的朋友可以参考下
    2023-12-12
  • python 根据字典的键值进行排序的方法

    python 根据字典的键值进行排序的方法

    这篇文章主要介绍了python 根据字典的键值进行排序的实现方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • python Scrapy框架原理解析

    python Scrapy框架原理解析

    这篇文章主要介绍了python Scrapy框架原理的相关资料,帮助大家更好的理解和使用python爬虫,感兴趣的朋友可以了解下
    2021-01-01
  • 详解Bagging算法的原理及Python实现

    详解Bagging算法的原理及Python实现

    Bagging算法(Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法。最初由Leo Breiman于1996年提出。Bagging算法可与其他分类、回归算法结合,提高其准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生
    2021-06-06
  • 从入门到进阶讲解Python自动化Playwright实战指南

    从入门到进阶讲解Python自动化Playwright实战指南

    Playwright是针对 Python 语言的纯自动化工具,它可以通过单个API自动执行 Chromium,Firefox 和 WebKit 浏览器,下面小编就来简单介绍一下它的具体使用吧
    2025-07-07
  • python实现微信每日一句自动发送给喜欢的人

    python实现微信每日一句自动发送给喜欢的人

    这篇文章主要为大家详细介绍了python实现微信每日一句自动发送给喜欢的人,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • python技能之数据导出excel的实例代码

    python技能之数据导出excel的实例代码

    本篇文章主要介绍了python技能之导出excel的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析

    python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析

    这篇文章主要介绍了python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 使用Python构建MCP服务器的详细配置步骤

    使用Python构建MCP服务器的详细配置步骤

    模型控制协议(MCP)是一种专为实现AI代理与工具解耦而设计的通信协议,为AI驱动应用程序的开发提供了高度的灵活性和模块化架构,本文将详细介绍MCP服务器的构建过程,包括工具函数的注册、配置以及与Claude Desktop等AI代理的集成,需要的朋友可以参考下
    2025-06-06
  • 使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤

    使用 Visual Studio Code(VSCode)搭建简单的Python+Djan

    这篇文章主要介绍了使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论