我的问题很简单,但我找不到一个好的答案,因为搜索引擎在术语“模块”上含糊不清。 我想要做的就是这个:
模块:a.py
x = 2
模块:b.py
import a
现在,我希望能够在不使用限定名称的情况下从x
访问b
(即无需键入a.x
,只需使用x
)。在我的情况下,我不能使用:
from a import x
因为我不知道哪些元素a
会包含。我不能用
from a import *
两者都不是。有没有简单的方法来合并或加入模块(我的意思是对象模块)?
答案 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.x
或from a import x
。
如果您使用的是zipimport
,则无需执行此操作。只需将存档路径添加到sys.path
:
import sys
sys.path.insert(0, '/path/to/archive.zip')
from test import x