1. 程式人生 > >importlib模塊與__import__詳解

importlib模塊與__import__詳解

b- doc highlight 用戶 clas isp pan blank 沒有

importlib模塊與__import__都可以通過過字符串來導入另外一個模塊,但在用法上和本質上都有很大的不同。

通過下面示例說明,有如下一個工程目錄:

技術分享圖片

技術分享圖片
name = test


def getName():
    print(name)
lib/test.py 技術分享圖片
name = demo


def getName():
    print(name)
demo.py

一、importlib模塊

技術分享圖片
import importlib


mName = lib.test
module = importlib.import_module(mName)
module.getName()
testimportlib.py

importlib是python的一個標準庫,通過導入importlib,調用import_module()方法,傳入用戶想要獲取的模塊對應的路徑字符串,即可獲取一個模塊module,module可以調用這個test模塊下的所有屬性和方法。

運行結果如下:

技術分享圖片

二、__import__

__import__是python的一個內置方法,直接調用__import__()即可獲取一個模塊。

技術分享圖片
mName = demo


module = __import__(mName)
module.getName()
testimport.py

運行結果如下:

技術分享圖片

此時調用的是同目錄下的demo模塊,可順利地獲取這個模塊,那麽當不再同一個目錄下呢?

技術分享圖片
mName = lib.test


module = __import__(mName)
module.getName()
testimport.py修改為

運行結果如下:

技術分享圖片

出錯提示表示,當前的模塊‘lib‘沒有getName()這個方法,因此沒有正確獲取到test模塊。

技術分享圖片
mName = lib.test


module = __import__(mName, fromlist=[test])
module.getName()
繼續修改testimport.py為

運行結果如下:

技術分享圖片

可見當加上__import__方法加上參數fromlist即可正確獲取。

有關importlib模塊其他說明詳見官方文檔:https://docs.python.org/3.7/library/importlib.html?highlight=importlib#module-importlib.abc

importlib模塊與__import__詳解