python中importlib實現模組的動態匯入

2022-06-12 13:06:09 字數 3637 閱讀 8759

一般而言,當我們需要某些功能的模組時(無論是內建模組或自定義功能的模組),可以通過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不多介紹了。

一般而言,當我們需要某些功能的模組時(無論是內建模組或自定義功能的模組),可以通過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不多介紹了。

python中 python中的 與

這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...

python中否定for 在python中否定函式

有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...

python中雙重迴圈 加速Python中的雙迴圈

有沒有辦法加快從上一次迭代更新其值的雙迴圈?在 中 def calc n,m x 1.0 y 2.0 container np.zeros n,2 for i in range n for j in range m x np.random.gamma 3,1.0 y y 4 y np.random....