python - 导入命名空间

时间:2016-09-17 15:30:34

标签: python import namespaces package

如果我有像这样的图书馆:

MyPackage的:

  • __init__.py

  • SubPackage1

    • __init__.py
    • moduleA.py
    • moduleB.py
  • SubPackage2
    • __init__.py
    • moduleC.py
    • moduleD.py

但我希望用户可以直接导入像import MyPackage.moduleA这样的moduleA。我可以通过在MyPackage/__init__.py中编写一些规则来实现这一点吗?

1 个答案:

答案 0 :(得分:3)

MyPackage/__init__.py中,从子包中导入您想要的模块:

from __future__ import absolute_import  # Python 3 import behaviour

from .SubPackage1 import moduleA
from .SubPackage2 import moduleD

这会使moduleA中的moduleDMyPackage全局变量。然后您可以使用:

from MyPackage import moduleA

并且它将绑定到同一个模块,或者

import MyPackage

myPackage.moduleA

直接访问该模块。

但是,无法使用

from MyPackage.moduleA import somename

因为这需要moduleA直接居住在MyPackage中; __init__中的全局不会将其删除。