2016-09-17 4 views
0

Если у меня есть библиотека, как:питон - импорт пространства имен

MyPackage:

  • __init__.py

  • SubPackage1

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

Но я хочу, чтобы пользователи могли импортировать ModuleA как import MyPackage.moduleA непосредственно. Могу ли я реализовать это, написав некоторые правила в MyPackage/__init__.py?

ответ

3

В 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__ не режет его там.