10.10 通过å—符串å��导入模å�—¶
问题¶
ä½ æƒ³å¯¼å…¥ä¸€ä¸ªæ¨¡å�—,但是模å�—çš„å��å—在å—ç¬¦ä¸²é‡Œã€‚ä½ æƒ³å¯¹å—符串调用导入命令。
解决方案¶
使用importlib.import_module()函数æ�¥æ‰‹åЍ坼入å��å—为å—符串给出的一个模å�—或者包的一部分。举个例å�:
>>> 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å�ªæ˜¯ç®€å�•地执行和import相å�Œçš„æ¥éª¤ï¼Œä½†æ˜¯è¿”å›žç”Ÿæˆ�的模å�—å¯¹è±¡ã€‚ä½ å�ªéœ€è¦�将其å˜å‚¨åœ¨ä¸€ä¸ªå�˜é‡�,然å�Žåƒ�æ£å¸¸çš„æ¨¡å�—ä¸€æ ·ä½¿ç”¨ã€‚
å¦‚æžœä½ æ£åœ¨ä½¿ç”¨çš„包,import_module()也å�¯ç”¨äºŽç›¸å¯¹å¯¼å…¥ã€‚ä½†æ˜¯ï¼Œä½ éœ€è¦�给它一个é¢�外的å�‚数。例如:
import importlib
# Same as 'from . import b'
b = importlib.import_module('.b', __package__)
讨论¶
使用import_module()手动导入模å�—的问题通常出现在以æŸ�ç§�æ–¹å¼�编写修改或覆盖模å�—的代ç �æ—¶å€™ã€‚ä¾‹å¦‚ï¼Œä¹Ÿè®¸ä½ æ£åœ¨æ‰§è¡ŒæŸ�ç§�自定义导入机制,需è¦�通过å��ç§°æ�¥åŠ è½½ä¸€ä¸ªæ¨¡å�—,通过补ä¸�åŠ è½½ä»£ç �。
在旧的代ç �ï¼Œæœ‰æ—¶ä½ ä¼šçœ‹åˆ°ç”¨äºŽå¯¼å…¥çš„å†…å»ºå‡½æ•°__import__()。尽管它能工作,但是importlib.import_module() 通常更容易使用。
自定义导入过程的高级实例�10.11�节