我正在尝试使用sphinx
记录python包并成功生成html文件。我正在记录的包由一组*.py
文件组成,大多数包含一个类,其中有几个文件是定义了函数的真正模块。我不需要暴露每个类都在一个模块中的事实,所以我在from
文件中添加了合适的__init__.py
语句,例如。
from base import Base
以便用户可以使用import pkg
命令,然后不必指定包含该类的模块:
import pkg
class MyBase(pkg.Base): # instead of pkg.base.Base ...
...
问题是sphinx坚持将课程记录为pkg.base.Base
。我试图在add_module_names = False
中设置conf.py
。但是,这会导致sphinx将该类显示为Base
而不是pkg.Base
。此外,这还会破坏 模块的*.py
个文件的文档。
如何让sphinx
将课程显示为pkg.Base
?
如何为每个add_module_names
文件选择性地设置*.py
指令?
答案 0 :(得分:6)
这是一种实现OP要求的方法:
在pkg/__init__.py
中添加__all__
列表:
from base import Base # Or use 'from base import *'
__all__ = ["Base"]
在.rst文件中使用.. automodule:: pkg
。
Sphinx现在将输出文档,其中类名称显示为pkg.Base
而不是pkg.base.Base
。
答案 1 :(得分:0)
我已将我在可扩展的外形中找到的答案合并:
my_project/
__init__.py
mess.py
mess.py
:class MyClass:
pass
class MyOtherClass(MyClass):
pass
__init__.py
:from .mess import MyClass, MyOtherClass
__all_exports = [MyClass, MyOtherClass]
for e in __all_exports:
e.__module__ = __name__
__all__ = [e.__name__ for e in __all_exports]
这对我来说似乎很有效。
答案 2 :(得分:-2)
简短的回答:你不应该。只需将sphinx指向代码目录即可。 Sphinx记录代码并显示模块hirarchy。最终如何导入模块完全由开发人员负责,但不是文档工具的责任。