python importlib動態導入模塊


  一般而言,當我們需要某些功能的模塊時(無論是內置模塊或自定義功能的模塊),可以通過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.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

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

#!/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不多介紹了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM