python importlib 用法小結(jié)
在使用Python的時(shí)候,大部分時(shí)候引入包,都是通過import 語句,比如
import numpy as np
有時(shí)候?yàn)榱烁鼜?fù)雜的需求,我們需要用程序化的方式來引入包 (Programmatic Importing), 比如根據(jù)輸入不同,選擇執(zhí)行兩個(gè)不同包里面的同名函數(shù),這時(shí)候就需要用到importlib這個(gè)庫了。這里先從一個(gè)簡單例子開始,逐漸深入地講一下這個(gè)庫的用法。
import_module用法
importlib 是Python3.1增加的系統(tǒng)庫,其中最常用的函數(shù)是其中的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'
# 相對(duì)引入, 一級(jí)目錄,與 import os.path as path 效果一樣
path = importlib.import_module('.path', package='os')
path.join('a', 'b') # results: 'a/b'
# 相對(duì)引入,二級(jí)目錄,與 import os.path as path 效果一樣
path = importlib.import_module('..path', package='os.time')
path.join('a', 'b') # results: 'a/b'
注意最后的例子中,相對(duì)引入時(shí)需要在前面增加.
或者.. 來表示相對(duì)目錄,如果直接使用importlib.import_module('path', package='os') 會(huì)報(bào)錯(cuò)。
如果光看這幾個(gè)例子的話,貌似跟import 沒什么區(qū)別,而且語句變得更復(fù)雜了,有點(diǎn)多此一舉的感覺。
其實(shí)不是的,個(gè)人認(rèn)為,importlib 的強(qiáng)大之處是將import 語句中寫死的字面值改成了import_module 函數(shù)中的參數(shù),因此可以通過修改參數(shù)在外部用變量來控制實(shí)際import的包或者模塊,大大地增加了靈活性。 下面會(huì)舉一個(gè)稍微實(shí)用一些的例子。
一個(gè)實(shí)際例子
假設(shè)我們在設(shè)計(jì)一個(gè)深度學(xué)習(xí)工具庫,里面包含了N個(gè)網(wǎng)絡(luò)模型(ResNet50, HRNet, MobileNet等等),每個(gè)模型的實(shí)現(xiàn)都有一個(gè)load_model 的函數(shù)。由于計(jì)算設(shè)備的性能不同,需要調(diào)用的網(wǎng)絡(luò)結(jié)構(gòu)也會(huì)變化,我們需要根據(jù)外部傳入的參數(shù)來判斷實(shí)際load哪一個(gè)模型。
雖然采用import 語句+if-else 判斷也能完成這個(gè)需求,舉例實(shí)現(xiàn)如下:
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
這種寫法存在下面的兩個(gè)問題:
- 寫法很冗余, N個(gè)模型的話需要添加2N條語句
- 新增模型時(shí)需要修改調(diào)用處的代碼,添加對(duì)應(yīng)的import語句,不符合模塊化的要求。
這時(shí)候采用importlib 就能比較簡潔地解決這個(gè)問題:
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 確實(shí)能大大簡化代碼。
了解這些內(nèi)容,日常使用這個(gè)庫就沒什么問題了(好像importlib 針對(duì)普通用戶場景的函數(shù)貌似就只有import_module 這一個(gè)),別的一些進(jìn)階的概念由于不太懂,暫時(shí)不展開了。
參考
到此這篇關(guān)于python importlib 用法小結(jié)的文章就介紹到這了,更多相關(guān)python importlib 用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一文帶你理解Python中import機(jī)制與importlib的妙用
- Python importlib模塊重載使用方法詳解
- Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼
- Python動(dòng)態(tài)導(dǎo)入模塊:__import__、importlib、動(dòng)態(tài)導(dǎo)入的使用場景實(shí)例分析
- Python 動(dòng)態(tài)導(dǎo)入對(duì)象,importlib.import_module()的使用方法
- Python中標(biāo)準(zhǔn)模塊importlib詳解
相關(guān)文章
封裝Detours用于Python中x64函數(shù)hook詳解
Detours是微軟發(fā)布的一個(gè)API hook框架,同時(shí)支持x86和x64,看文檔說也支持ARM和ARM64的Windows,這篇文章主要介紹了封裝Detours用于Python中x64函數(shù)hook,需要的朋友可以參考下2023-12-12
python 根據(jù)字典的鍵值進(jìn)行排序的方法
這篇文章主要介紹了python 根據(jù)字典的鍵值進(jìn)行排序的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07
詳解Bagging算法的原理及Python實(shí)現(xiàn)
Bagging算法(Bootstrap aggregating,引導(dǎo)聚集算法),又稱裝袋算法,是機(jī)器學(xué)習(xí)領(lǐng)域的一種團(tuán)體學(xué)習(xí)算法。最初由Leo Breiman于1996年提出。Bagging算法可與其他分類、回歸算法結(jié)合,提高其準(zhǔn)確率、穩(wěn)定性的同時(shí),通過降低結(jié)果的方差,避免過擬合的發(fā)生2021-06-06
從入門到進(jìn)階講解Python自動(dòng)化Playwright實(shí)戰(zhàn)指南
Playwright是針對(duì) Python 語言的純自動(dòng)化工具,它可以通過單個(gè)API自動(dòng)執(zhí)行?Chromium,Firefox 和 WebKit 瀏覽器,下面小編就來簡單介紹一下它的具體使用吧2025-07-07
python實(shí)現(xiàn)微信每日一句自動(dòng)發(fā)送給喜歡的人
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信每日一句自動(dòng)發(fā)送給喜歡的人,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
python技能之?dāng)?shù)據(jù)導(dǎo)出excel的實(shí)例代碼
本篇文章主要介紹了python技能之導(dǎo)出excel的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
python爬蟲 貓眼電影和電影天堂數(shù)據(jù)csv和mysql存儲(chǔ)過程解析
這篇文章主要介紹了python爬蟲 貓眼電影和電影天堂數(shù)據(jù)csv和mysql存儲(chǔ)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
使用Python構(gòu)建MCP服務(wù)器的詳細(xì)配置步驟
模型控制協(xié)議(MCP)是一種專為實(shí)現(xiàn)AI代理與工具解耦而設(shè)計(jì)的通信協(xié)議,為AI驅(qū)動(dòng)應(yīng)用程序的開發(fā)提供了高度的靈活性和模塊化架構(gòu),本文將詳細(xì)介紹MCP服務(wù)器的構(gòu)建過程,包括工具函數(shù)的注冊、配置以及與Claude Desktop等AI代理的集成,需要的朋友可以參考下2025-06-06
使用 Visual Studio Code(VSCode)搭建簡單的Python+Djan
這篇文章主要介紹了使用 Visual Studio Code(VSCode)搭建簡單的Python+Django開發(fā)環(huán)境的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12

