我有一个Python包,其中实现被拆分(为了可维护性)为两个内部子模块。从用户的角度来看,包应该显示为一个单元,因此在包__init__.py
中,两个子模块都使用import *
导入,如下所示:
# filesystem layout:
mypkg/
__init__.py
subA.py # defines class A
subB.py # defines class B
和
# __init__.py
from .subA import *
from .subB import *
从包功能的角度来看,这是按预期工作的:
>>> import mypkg
>>> a = mypkg.A() # works
>>> b = mypkg.B() # works
如果直接查找这些类的内联帮助,一切都很好:
>>> help(mypkg.A) # works
>>> help(mypkg.subA.A) # also works
问题在于,如果我只是查找顶级包的帮助,请参阅
>>> help(mypkg)
然后子模块中的类和函数根本不会“自愿”出现(尽管它们的变量确实出现在DATA
部分中)。这是预期/正确的行为吗?有没有办法绕过它,以便用户不必知道为实现/维护方便而存在的子模块?
答案 0 :(得分:1)
我所知道的最佳解决方案就是将相关的文档对象(类,函数,数据)添加到__all__
中的__init__.py
。