我有一个包a,树是:
a/
/__init__.py
/b.py
我怎样才能import a.b as a_.b
?
答案 0 :(得分:5)
你必须分两行:
import a as a_
from a import b
print(a_.b)
# <module 'a.b' from '.\\a\\b.py'>
或者:
import a as a_
import a.b
print(a_.b)
# <module 'a.b' from '.\\a\\b.py'>
第一个缺点是它将b
放入你的命名空间,第二个缺点是它将a
放入你的命名空间。如果您愿意,可以分别使用del b
和del a
来解决此问题。
或者,您也可以分别将第二行写为from a import b as _
或import a.b as _
,这会阻止b
和a
出现在您的命名空间中。
答案 1 :(得分:0)
执行此操作的一种方法是在sys.modules字典中注册名称a_:
import sys
import a as a_
sys.modules['a_'] = a_
import a_.b
警告:执行此操作会为此python会话全局注册a_
,因此尝试import a_
的任何其他模块都将以a
结束。
对于您的特定情况,由于全球影响,这可能是一个不好的方法。但是,当需要全局重命名时,这可能很有用。