Python importlib動態(tài)導入模塊實現(xiàn)代碼
閱讀目錄
一般而言,當我們需要某些功能的模塊時(無論是內(nèi)置模塊或自定義功能的模塊),可以通過import module 或者 from * import module的方式導入,這屬于靜態(tài)導入,很容易理解。
而如果當我們需要在程序的運行過程時才能決定導入某個文件中的模塊時,并且這些文件提供了同樣的接口名字,上面說的方式就不適用了,這時候需要使用python 的動態(tài)導入。
importlib使用
如在scripts目錄中保存著一些功能模塊,向外提供類似的接口poc()和腳本描述信息description,需要傳入一個參數(shù)target,當然腳本執(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
而我們需要動態(tài)傳入腳本名,來選用此時要執(zhí)行的功能:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import importlib
script_name = input('please input script_name : ') # 手動輸入腳本名
module = importlib.import_module('scripts.{}'.format(script_name)) # 動態(tài)導入相應模塊
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
當我們動態(tài)給定腳本名字時,就會動態(tài)的導入該模塊,執(zhí)行相應的功能。
importlib其他介紹
python doc: importlib
importlib中的幾個函數(shù):__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不多介紹了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python使用PyAutoGUI實現(xiàn)桌面自動化功能
PyAutoGUI 是一個跨平臺的桌面自動化工具,能夠模擬鼠標點擊、鍵盤輸入、屏幕截圖與圖像識別,適用于重復性桌面任務,本集通過代碼+截圖+輸出日志的實戰(zhàn)形式,帶你掌握從基礎操作到復雜任務的全流程自動化,需要的朋友可以參考下2025-07-07
pycharm快捷鍵自動提示documentation問題(auto?Ctrl+Q)
這篇文章主要介紹了pycharm快捷鍵自動提示documentation問題(auto?Ctrl+Q),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
對python產(chǎn)生隨機的二維數(shù)組實例詳解
今天小編就為大家分享一篇對python產(chǎn)生隨機的二維數(shù)組實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
探索Python元類的魅力:靈活定制類的創(chuàng)建過程
在Python編程中,元類(Metaclass)是一項高級特性,它允許我們在定義類的時候動態(tài)地控制類的創(chuàng)建過程。元類提供了一種強大的機制,可以對類進行定制化,擴展其功能,并在類的實例化過程中執(zhí)行額外的操作,本文將深入解析2023-10-10

