当前位置: 代码网 > it编程>前端脚本>Python > python importlib 用法小结

python importlib 用法小结

2026年02月08日 Python 我要评论
在使用python的时候,大部分时候引入包,都是通过import 语句,比如import numpy as np有时候为了更复杂的需求,我们需要用程序化的方式来引入包 (programmatic im

在使用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 用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com