importlib模塊與__import__詳解
阿新 • • 發佈:2019-04-05
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__詳解