python importlib動態匯入模組

2022-02-20 12:20:56 字數 1784 閱讀 7629

一般而言,當我們需要某些功能的模組時(無論是內建模組或自定義功能的模組),可以通過import module 或者 from * import module的方式匯入,這屬於靜態匯入,很容易理解。

而如果當我們需要在程式的執行過程時才能決定匯入某個檔案中的模組時,並且這些檔案提供了同樣的介面名字,上面說的方式就不適用了,這時候需要使用python 的動態匯入。

importlib使用

如在scripts目錄中儲存著一些功能模組,向外提供類似的介面poc()和指令碼描述資訊description,需要傳入乙個引數target,當然指令碼執行的功能是不一樣的,以下只是舉例:

starnight:exp-m starnight$ ls scripts/

__init__.py __pycache__

test1.py test2.py test3.pystarnight: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

而我們需要動態傳入指令碼名,來選用此時要執行的功能:

#

!/usr/bin/env python

#-*- coding:utf-8 -*-

import

importlib

script_name = input('

please input script_name :

')     # 手動輸入指令碼名               

module = importlib.import_module('

scripts.{}

'.format(script_name))    # 動態匯入相應模組

func = module.poc(''

)      # 執行指令碼功能

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

當我們動態給定指令碼名字時,就會動態的匯入該模組,執行相應的功能。

importlib其他介紹

python doc: importlib

importlib中的幾個函式:__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不多介紹了。

cmd匯入python模組 Python模組匯入

python模組匯入 import 想使用python原始檔,只需在另乙個原始檔裡執行import語句,語法如下 importnumpy n numpy.array 1,2 3,4 print n 1 2 3 4 importmatplotlib.pyplotasplt plt.plot n plt...

動態匯入模組

正常模組匯入方式 import module 模組路徑 同時匯入多個模組 import os,sys,socket 動態匯入模組允許我們通過字串形式來匯入模組 import os,sys my sys import sys my os import os print sys.version prin...

VC 動態匯入DLL

一般的dll都會有對應的導入庫,方便程式靜態載入動態鏈結庫,否則的話,你可能就需要自己動態匯入了。匯入過程 1.loadlibrary 調入dll檔案,然後在手工getprocaddress獲得對應的函式了。2.有了導入庫,你就只需要鏈結導入庫後,按照標頭檔案函式介面的定義,宣告呼叫函式就可以拉。h...