我有一个包 a ,树是:
a/
/__init__.py
/b.py
我该怎么import a.b as a_.b
办?
您必须分两行执行此操作:
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
出现在您的命名空间中。
一种方法是在 sys.modules 字典中注册名称 a_ :
import sys
import a as a_
sys.modules['a_'] = a_
import a_.b
警告:这样做a_
会为这个 python 会话全局注册,所以任何其他尝试的模块import a_
都会以a
.
对于您的特定情况,由于全球影响,这可能是解决此问题的不好方法。但是,当需要全局重命名时,这可能很有用。