如何在没有模块名称的情况下记录类?

时间:2013-02-27 15:10:08

标签: python python-sphinx

我正在尝试使用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指令?

3 个答案:

答案 0 :(得分:6)

这是一种实现OP要求的方法:

  1. pkg/__init__.py中添加__all__列表:

    from base import Base    # Or use 'from base import *'
    
    __all__ = ["Base"]
    
  2. 在.rst文件中使用.. automodule:: pkg

  3. 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。最终如何导入模块完全由开发人员负责,但不是文档工具的责任。