【问题标题】:python - import namespacepython - 导入命名空间
【发布时间】:2017-01-25 16:34:24
【问题描述】:
如果我有这样的库:
我的包裹:
__init__.py
-
子包1
__init__.py
- moduleA.py
- 模块B.py
- 子包2
__init__.py
- moduleC.py
- moduleD.py
但我希望用户可以像import MyPackage.moduleA 这样直接导入moduleA。我可以通过在MyPackage/__init__.py 中写一些规则来实现吗?
【问题讨论】:
标签:
python
import
namespaces
package
【解决方案1】:
在MyPackage/__init__.py 中,从子包中导入您想要的模块:
from __future__ import absolute_import # Python 3 import behaviour
from .SubPackage1 import moduleA
from .SubPackage2 import moduleD
这使得moduleA 和moduleD 在MyPackage 中成为全局变量。然后你可以使用:
from MyPackage import moduleA
这将绑定到同一个模块,或者做
import MyPackage
myPackage.moduleA
直接访问该模块。
但是,你不能使用
from MyPackage.moduleA import somename
因为这需要moduleA 直接存在于 MyPackage 中; __init__ 中的全局变量不会在那里剪切它。