对Python中的__import__感到困惑

时间:2014-12-08 09:27:35

标签: python-2.7 python-import

我尝试按__import__导入模块,如下所示:

>>> mod = __import__('x.y.z')

但我只有x

>>> print mod
>>> <module 'x' from '...'>

如何导入z?我试过这样,它有效,但我不知道为什么。

>>> mod = __import__('x.y.z', {}, {}, [''])
>>> print mod
>>> <module 'x.y.z' from '...'>

我对此非常困惑,而且我也不知道globalslocals参数。

很多!

2 个答案:

答案 0 :(得分:0)

请改用importlib模块。其中裸骨在2.7中可用。

import importlib
z = importlib.import_module("z", "x.y") 
# equivalent to
from x.y import z

答案 1 :(得分:0)

相关说明from the docs__import__):

  

当name变量的形式为package.module时,通常会返回顶级包(直到第一个点的名称),而不是按名称命名的模块。但是,当给出非空的fromlist参数时,将返回按名称命名的模块。

因此,它类似于编写import x.y.z,这也使x可用(以及x.yx.y.z)。