将模块元素导入另一个没有限定名称的模块

时间:2013-02-07 14:15:50

标签: python python-import

我的问题很简单,但我找不到一个好的答案,因为搜索引擎在术语“模块”上含糊不清。 我想要做的就是这个:

模块:a.py

x = 2

模块:b.py

import a

现在,我希望能够在不使用限定名称的情况下从x访问b(即无需键入a.x,只需使用x)。在我的情况下,我不能使用:

from a import x

因为我不知道哪些元素a会包含。我不能用

from a import *

两者都不是。有没有简单的方法来合并或加入模块(我的意思是对象模块)?

1 个答案:

答案 0 :(得分:1)

是一个好主意,但你可以使用:

globals().update(vars(a))

a模块中定义的所有名称添加到本地名称空间。这几乎与from a import *相同。要完全模仿from a import *,而不使用from a import *本身,您必须使用:

globals().update(p for p in vars(a).items() if p[0] in getattr(a, '__all__', dir(a)))

您通常会使用x = a.xfrom a import x

如果您使用的是zipimport,则无需执行此操作。只需将存档路径添加到sys.path

即可
import sys
sys.path.insert(0, '/path/to/archive.zip')
from test import x