10.10 通過字符串名導入模塊

2018-02-24 15:27 更新

問題

你想導入一個模塊,但是模塊的名字在字符串里。你想對字符串調(diào)用導入命令。

解決方案

使用importlib.import_module()函數(shù)來手動導入名字為字符串給出的一個模塊或者包的一部分。舉個例子:

>>> import importlib
>>> math = importlib.import_module('math')
>>> math.sin(2)
0.9092974268256817
>>> mod = importlib.import_module('urllib.request')
>>> u = mod.urlopen('http://www.python.org')
>>>

import_module只是簡單地執(zhí)行和import相同的步驟,但是返回生成的模塊對象。你只需要將其存儲在一個變量,然后像正常的模塊一樣使用。

如果你正在使用的包,import_module()也可用于相對導入。但是,你需要給它一個額外的參數(shù)。例如:

import importlib
# Same as 'from . import b'
b = importlib.import_module('.b', __package__)

討論

使用import_module()手動導入模塊的問題通常出現(xiàn)在以某種方式編寫修改或覆蓋模塊的代碼時候。例如,也許你正在執(zhí)行某種自定義導入機制,需要通過名稱來加載一個模塊,通過補丁加載代碼。

在舊的代碼,有時你會看到用于導入的內(nèi)建函數(shù)import()。盡管它能工作,但是importlib.import_module() 通常更容易使用。

自定義導入過程的高級實例見10.11小節(jié)

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號