Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼
閱讀目錄
一般而言,當(dāng)我們需要某些功能的模塊時(shí)(無(wú)論是內(nèi)置模塊或自定義功能的模塊),可以通過(guò)import module 或者 from * import module的方式導(dǎo)入,這屬于靜態(tài)導(dǎo)入,很容易理解。
而如果當(dāng)我們需要在程序的運(yùn)行過(guò)程時(shí)才能決定導(dǎo)入某個(gè)文件中的模塊時(shí),并且這些文件提供了同樣的接口名字,上面說(shuō)的方式就不適用了,這時(shí)候需要使用python 的動(dòng)態(tài)導(dǎo)入。
importlib使用
如在scripts目錄中保存著一些功能模塊,向外提供類(lèi)似的接口poc()和腳本描述信息description,需要傳入一個(gè)參數(shù)target,當(dāng)然腳本執(zhí)行的功能是不一樣的,以下只是舉例:
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
而我們需要?jiǎng)討B(tài)傳入腳本名,來(lái)選用此時(shí)要執(zhí)行的功能:
#!/usr/bin/env python # -*- coding:utf-8 -*- import importlib script_name = input('please input script_name : ') # 手動(dòng)輸入腳本名 module = importlib.import_module('scripts.{}'.format(script_name)) # 動(dòng)態(tài)導(dǎo)入相應(yīng)模塊 func = module.poc('') # 執(zhí)行腳本功能 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
當(dāng)我們動(dòng)態(tài)給定腳本名字時(shí),就會(huì)動(dòng)態(tài)的導(dǎo)入該模塊,執(zhí)行相應(yīng)的功能。
importlib其他介紹
python doc: importlib
importlib中的幾個(gè)函數(shù):__import__、import_module、find_loader、invalidate_caches、reload
"Note Programmatic importing of modules should use import_module() instead of this function."
當(dāng)進(jìn)行編程時(shí),使用import_module,如上使用該模塊。
find_loader用來(lái)查找模塊,reload重新載入模塊,invalidate_caches不多介紹了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python?動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)模塊熱更新的方法
- Python動(dòng)態(tài)導(dǎo)入模塊:__import__、importlib、動(dòng)態(tài)導(dǎo)入的使用場(chǎng)景實(shí)例分析
- Python動(dòng)態(tài)導(dǎo)入模塊和反射機(jī)制詳解
- Python 動(dòng)態(tài)導(dǎo)入對(duì)象,importlib.import_module()的使用方法
- Python動(dòng)態(tài)導(dǎo)入模塊的方法實(shí)例分析
- Python 靜態(tài)導(dǎo)入與動(dòng)態(tài)導(dǎo)入的實(shí)現(xiàn)示例
相關(guān)文章
python設(shè)計(jì)tcp數(shù)據(jù)包協(xié)議類(lèi)的例子
今天小編就為大家分享一篇python設(shè)計(jì)tcp數(shù)據(jù)包協(xié)議類(lèi)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07pytorch構(gòu)建網(wǎng)絡(luò)模型的4種方法
這篇文章主要為大家詳細(xì)介紹了pytorch構(gòu)建網(wǎng)絡(luò)模型的4種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04基于django和dropzone.js實(shí)現(xiàn)上傳文件
這篇文章主要介紹了基于django和dropzone.js實(shí)現(xiàn)上傳文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python cookie反爬處理的實(shí)現(xiàn)
這篇文章主要介紹了python cookie反爬處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11python神經(jīng)網(wǎng)絡(luò)編程實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別
這篇文章主要為大家詳細(xì)介紹了python神經(jīng)網(wǎng)絡(luò)編程實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05numba CUDA報(bào)錯(cuò)的問(wèn)題解決
本文主要介紹了numba CUDA報(bào)錯(cuò)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python進(jìn)行圖像邊緣檢測(cè)的詳細(xì)教程
相信大家對(duì)于邊緣檢測(cè)這幾個(gè)詞并不陌生,但是相對(duì)于如何處理,如何進(jìn)行圖像的邊緣檢測(cè)卻無(wú)能為力、束手無(wú)策了,下面這篇文章主要給大家介紹了關(guān)于python進(jìn)行圖像邊緣檢測(cè)的詳細(xì)教程,需要的朋友可以參考下2023-04-04python的變量和簡(jiǎn)單數(shù)字類(lèi)型詳解
這篇文章給大家詳細(xì)介紹了python的變量和簡(jiǎn)單數(shù)字類(lèi)型,文中介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們可以參考借鑒2021-09-09