3

我有一个包 a ,树是:

a/
  /__init__.py
  /b.py

我该怎么import a.b as a_.b办?

4

2 回答 2

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 _,这将阻止ba出现在您的命名空间中。

于 2013-09-11T01:41:14.003 回答
0

一种方法是在 sys.modules 字典中注册名称 a_ :

import sys
import a as a_
sys.modules['a_'] = a_
import a_.b


警告:这样做a_会为这个 python 会话全局注册,所以任何其他尝试的模块import a_都会以a.

对于您的特定情况,由于全球影响,这可能是解决此问题的不好方法。但是,当需要全局重命名时,这可能很有用。

于 2013-12-16T04:06:34.603 回答