【问题标题】:How to document Python code using Doxygen [closed]如何使用 Doxygen 记录 Python 代码 [关闭]
【发布时间】:2010-09-08 16:29:40
【问题描述】:

我喜欢用 Doxygen 创建 C 或 PHP 代码的文档。我有一个即将到来的 Python 项目,我想我记得 Python 没有 /* .. */ cmets,而且还有它自己的自我文档工具,这似乎是 Python 式的文档方式。

由于我熟悉 Doxygen,如何使用它来生成 Python 文档?有什么特别需要我注意的吗?

【问题讨论】:

    标签: python documentation python-sphinx doxygen docstring


    【解决方案1】:

    doxypy 输入过滤器允许您以标准 Python 文档字符串格式使用几乎所有 Doxygen 格式化标签。我用它来记录一个大型的混合 C++ 和 Python 游戏应用程序框架,它运行良好。

    【讨论】:

    • 很遗憾,这个问题的正确答案也在底部:(
    • 您可能还想查看doxypypy,因为它会将 Pythonic 文档字符串转换为 Doxygen 可以使用的东西。
    • Doxypy 似乎已经死了。
    【解决方案2】:

    这里是documented on the doxygen website,但在这里总结一下:

    您可以使用 doxygen 来记录您的 Python 代码。您可以使用 Python 文档字符串语法:

    """@package docstring
    Documentation for this module.
    
    More details.
    """
    
    def func():
        """Documentation for a function.
    
        More details.
        """
        pass
    

    在这种情况下,cmet 将被 doxygen 提取,但您将无法使用任何 special doxygen commands

    或者您可以(类似于 doxygen 下的 C 风格语言)在成员之前的第一行加倍注释标记 (#):

    ## @package pyexample
    #  Documentation for this module.
    #
    #  More details.
    
    ## Documentation for a function.
    #
    #  More details.
    def func():
        pass
    

    在这种情况下,您可以使用特殊的 doxygen 命令。没有特定的 Python 输出模式,但您显然可以通过将 OPTMIZE_OUTPUT_JAVA 设置为 YES 来改善结果。

    老实说,我对这种差异感到有点惊讶 - 似乎一旦 doxygen 可以检测到 ## 块或“””块中的 cmets,大部分工作都将完成,您就可以使用两种情况下的特殊命令。也许他们希望使用“”的人遵守更多 Pythonic 文档实践,这会干扰特殊的 doxygen 命令?

    【讨论】:

    • 注释作为 Python 中的文档很糟糕。评论是针对模块维护者的(为什么以及如何实现)。所有文档都应该在文档字符串中(如何使用)。
    • Python 将拉入 cmets 并将它们用作文档字符串,因此这两种格式都适用于 pydoc。
    • 看看doxypy,它可以在普通文档字符串中使用特殊命令
    • 看看doxypypy - doxypy 的更新实现
    【解决方案3】:

    最后,你只有两个选择:

    您使用 Doxygen 生成内容,或者使用 Sphinx* 生成内容。

    1. Doxygen:它不是大多数 Python 项目的首选工具。但是,如果您必须处理用 C 或 C++ 编写的其他相关项目,这可能是有道理的。为此,您可以使用 doxypypy 改进 Doxygen 和 Python 之间的集成。

    2. Sphinx:用于记录 Python 项目的事实工具。您在这里有三个选项:手动、半自动(存根生成)和全自动(类似 Doxygen)。

      1. 对于手动 API 文档,您有 Sphinx autodoc。编写包含嵌入式 API 生成元素的用户指南非常棒。
      2. 对于半自动,您有 Sphinx autosummary。您可以将构建系统设置为调用 sphinx-autogen 或使用 autosummary_generate 配置设置 Sphinx。您将需要使用自动摘要设置页面,然后手动编辑页面。你有选择,但我对这种方法的经验是它需要太多的配置,最后即使在创建新模板之后,我也发现了错误,并且无法准确地确定哪些公开为公共 API,哪些不公开。我的观点是这个工具非常适合需要手动编辑的存根生成,仅此而已。就像是手动结束的捷径。
      3. 全自动。这已经被批评了很多次,很长一段时间以来,我们都没有一个很好的与 Sphinx 集成的全自动 Python API 生成器,直到 AutoAPI 出现,这是一个新手。这是迄今为止 Python 中自动生成 API 的最佳方式(注意:无耻的自我推销)。

    还有其他选项需要注意:

    • Breathe:这是一个非常好的想法,当您使用其他使用 Doxygen 的语言处理多个相关项目时,这很有意义。这个想法是使用 Doxygen XML 输出并将其提供给 Sphinx 以生成您的 API。因此,您可以保留 Doxygen 的所有优点并统一 Sphinx 中的文档系统。理论上厉害。现在,实际上,我上次检查项目时还没有准备好投入生产。
    • pydoctor*:很特别。生成自己的输出。它与 Sphinx 有一些基本的集成,还有一些不错的功能。

    【讨论】:

    • 使用autoapi的命令是什么。我已经修改了 conf.py 以包含 autoapi 模块。目前,我运行“sphinx-apidoc -o apidocs --full”。
    • 您不需要额外的命令。只需使用 sphinx-build 构建您的 Sphinx 文档。我将它与 Tox 集成,如下所示:github.com/HPENetworking/cookiecutter_python/blob/module/…
    • @Havok 当我必须将模块的所有元素放入 __all__ 变量显式中时,我看不出 AutoAPI 是如何“全自动”的。
    • Doxygen 是 C++ 的文档生成器,对于 Sphinx 来说,代码生成只是一个选项,Sphinx 的主要目的是编写文档。与 Python 的集成与与 C++ 的集成相去甚远。例如1如果您想在 doxygen 上使用项目的所有 python 文档字符串,则需要使用特定标签重写它们。例如2 doxygen.nl/manual/diagrams.html “Doxygen 具有为 C++ 类生成继承图的内置支持。”但不适用于 Python,更不用说函数调用了。
    【解决方案4】:

    据我了解,Sphinx 主要是用于格式化独立于源代码编写的文档的工具。

    对于从 Python 文档字符串生成 API 文档,主要的工具是 pdocpydoctor。这是 pydoctor 为 TwistedBazaar 生成的 API 文档。

    当然,如果您只是想在处理内容时查看文档字符串,可以使用“pydoc”命令行工具以及交互式解释器中的help() 函数。

    【讨论】:

    • 确实,sphinx 使用独立于源代码编写的文档作为基础,但是使用 autodoc 扩展可以轻松地包含来自 python 模块的文档字符串。由于它的动态特性,我发现 python 模块的手写文档比生成的 api 文档更有用。
    • “手写”文档在您尝试了解一些几乎没有文档记录的项目中的类之间的结构和关系时不可用。
    • pdoc 由命令行单行程序(没有其他配置文件)使用,对我来说似乎完全没问题。在 CI 上构建项目时,我们使用 pdoc 为 python 生成文档。
    【解决方案5】:

    另一个非常好的文档工具是sphinx。它将用于即将推出的 python 2.6 documentation,并被 django 和许多其他 python 项目使用。

    来自狮身人面像网站:

    • 输出格式:HTML(包括 Windows HTML 帮助)和 LaTeX,用于可打印的 PDF 版本
    • 广泛的交叉引用:函数、类、词汇表术语和类似信息的语义标记和自动链接
    • 层次结构:轻松定义文档树,自动链接到兄弟姐妹、父母和孩子
    • 自动索引:通用索引以及模块索引
    • 代码处理:使用 Pygments 荧光笔自动突出显示
    • 扩展:自动测试代码 sn-ps、包含来自 Python 模块的文档字符串等等

    【讨论】:

    • 试过了。虽然 sphinx 本身是一个非常有趣的工具,但它并不是我所期望的来自 doxygen 的工具。对于真正优秀的最终客户文档来说,doxygen 是一个更好的工具,对于希望以漂亮的可打印格式查看 API 概述的 SW 设计师来说,它要好得多。
    • @Zane 我同意。作为一个 Doxygen 爱好者,我非常想念全自动 API 参考指南生成。检查我的答案,因为现在有其他选项可用。
    猜你喜欢
    • 1970-01-01
    • 2013-03-22
    • 2010-11-06
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多