doxygen + doxypypy + docstring 生成python文档

1 原生doxygen对python注释的文档化支持情况

默认情况下,doxygen可以同时支持两种风格的python注释,原生的docstring和类似java doc风格的##。不过实际使用时不是十全十美

"""@package docstring
Documentation for this module.

More details.
"""

def func():
    """Documentation for a function.

    More details.
    """
    pass

类似java doc风格的##

#  Documentation for this module.
#
#  More details.

## Documentation for a function.
#
#  More details.
def func():
    pass
  • 可惜的是,对原生的docstring,在函数多行定义的时候,不仅经常提取不到注释,而且即使提取到注释,也不支持各种注释tag,如@param,@see等。
  • 对java doc风格的##,虽然支持较好,可惜的是偶使用的是pydev做IDE工具的,pydev显示函数注释信息总是错位的,提取的是下一个函数的注释。

2. input filter:doxypypy

幸运的是,有牛人提供了一个doxygen的input filter,用于把原生docstring转换为java doc风格的##。https://github.com/Feneric/doxypypy。注意还有一个类似的叫doxypy的工具,是现在这个工具的前身,那个工具问题不少。

这里先简单介绍一下doxygen的input filter的功能,简单一句话描述就是一个文本的预处理。当你定义了input filter之后,doxygen在生成文档时就不会直接读取文件内容,而是先调用input filter处理文件内容,然后将处理结果作为doxygen自己的输入。

再简单介绍一下doxypypy这个工具的工作原理:简单来说就是先提取出docstring,然后去掉docstring开头和结尾的""", 然后插入##作为第一行,再在其余各行注释前面加上#,这样就很简单巧妙的转换为类java doc的##风格了。将转换后的结果作为doxygen的输入,就可以制作出漂亮的文档了。

# As close as possible to a direct copy of the sample in PEP 257 and still
# be valid code. Simple as can be.

complex_zero = 0j

def complex(real=0.0, imag=0.0):
    """Form a complex number.

    Keyword arguments:
    real -- the real part (default 0.0)
    imag -- the imaginary part (default 0.0)

    """
    if imag == 0.0 and real == 0.0:
        return complex_zero
    else:
        return complex(real, imag)

经过转换之后,就变成

# As close as possible to a direct copy of the sample in PEP 257 and still
# be valid code. Simple as can be.

complex_zero = 0j

##Form a complex number.
#
#    Keyword arguments:
#    real -- the real part (default 0.0)
#    imag -- the imaginary part (default 0.0)
#
#
def complex(real=0.0, imag=0.0):
    if imag == 0.0 and real == 0.0:
        return complex_zero
    else:
        return complex(real, imag)

甚至,你还可以配置脚本运行参数,自动从某种tag风格装换为固定的@tag的风格,还是以上面为例

# As close as possible to a direct copy of the sample in PEP 257 and still
# be valid code. Simple as can be.

complex_zero = 0j

## @brief Form a complex number.
#
#
# @param		real	the real part (default 0.0)
# @param		imag	the imaginary part (default 0.0)
#
#
# @namespace sample_pep.complex
def complex(real=0.0, imag=0.0):
    if imag == 0.0 and real == 0.0:
        return complex_zero
    else:
        return complex(real, imag)

3 添加doxypypy对中文的支持

解释的话稍微多了点,下面说一下中文支持。原生的doxypypy工具不支持中文。想鄙人这种没有专业八级英语的,写的注释有时还不如不写。不过要支持也简单,使用下面这个补丁。不多说,就两点:使用codecs按utf-8编码格式读入,将标准输出的编码设置为utf-8。

diff --git a/doxypypy/doxypypy.py b/doxypypy/doxypypy.py
old mode 100755
new mode 100644
index 833a723..76ca6be
--- a/doxypypy/doxypypy.py
+++ b/doxypypy/doxypypy.py
@@ -20,6 +20,8 @@
 from os import linesep
 from string import whitespace
 from codeop import compile_command
+import codecs
+import sys

 def coroutine(func):
@@ -820,15 +822,17 @@

     # Figure out what is being requested.
     (options, inFilename) = optParse()
-
+
+    file_encoding = 'utf-8'
     # Read contents of input file.
-    inFile = open(inFilename)
+    inFile = codecs.open(inFilename, encoding=file_encoding)
     lines = inFile.readlines()
     inFile.close()
     # Create the abstract syntax tree for the input file.
     astWalker = AstWalker(lines, options, inFilename)
     astWalker.parseLines()
     # Output the modified source.
+    sys.stdout = codecs.getwriter(file_encoding)(sys.stdout.buffer, 'strict')
     print(astWalker.getLines())

 # See if we're running as a script.

4 在doxygen中配置doxypypy

最后说一下如何在doxygen中配置上面工具,直接上图片。注意:doxypypy.py的第一行表示的是python的安装路径,注意修改为自己电脑上的python路径。

如果需要下载修改过的doxypypy.py, 可以在这里下载doxypypy--- Doxygen filter for Python

that‘s all

时间: 2024-10-27 12:46:26

doxygen + doxypypy + docstring 生成python文档的相关文章

使用doxygen、graphviz生成OpenSceneGraph文档

OpenSceneGraph是一款开源的c++三维引擎库,不过因为是开源,所以相关文档十分稀缺.虽然官网提供的源码可以直接生成doxygen文档,不过貌似不太好用,反正我是没有正确生成. 自己研究了一下用doxygen.graphviz生成OpenSceneGraph文档,并且最终成功生成相关文档,把过程整理一下,希望对大家有所帮助. 原料: doxygen-1.8.11-setup.graphviz-2.38, 这两款软件都是开源的,下载地址分别是: http://ftp.stack.nl/p

Python文档生成工具pydoc

在Python中有很多很好的工具来生成字符串文档(docstring),比如说: epydoc.doxygen.sphinx,但始终觉得pydoc还是不错的工具,用法非常简单,功能也算不错,本文主要介绍pydoc. pydoc是Python自带的模块,主要用于从python模块中自动生成文档,这些文档可以基于文本呈现的.也可以生成WEB 页面的,还可以在服务器上以浏览器的方式呈现! [用法] Windows下: D:\>python -m pydoc <modulename> # 比如说

利用sphinx为python项目生成API文档

sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apidoc -F -o ./doc ./domain/model/ 在当前目录下新建doc目录,api文档的文件夹就在此目录下,./domain/model/ 表示需要生成api文档的目录. 3:进入doc目录 修改conf.py文件 设置代码路径为sys.path.insert(0, os.path.ab

Python sphinx-build在Windows系统中生成Html文档

看到前同事发布的"Markdown/reST 文档发布流水线"基于TFS.Docker.Azure等工具和平台进行文档发布的介绍说明,不得不在心中暗暗竖起大拇指.这套模式,实现了文档编写后版本管理.发布.存档.分享的高度自动化,它不仅仅可以应用在文章中介绍的技术文档发布模式,同样也适用于我们大多数web.app等软件生命周期过程模式.DevOps一词的盛行,绝对不是软件行业中又一个流行语的鼓吹和炒作,而是软件过程的一种发展和进化.结合自动化平台.Docker.云平台等优秀技术和产品.软

python 3.7 生成数据库文档

开发阶段数据库总是有变动,开发人员需要维护文档给相关人员使用,故编写一个脚本自动生成数据库文档 生成的excel如下 import cx_Oracle import os from openpyxl import load_workbook from openpyxl import Workbook from openpyxl.styles import PatternFill os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' ta

Windows7下使用sphinx生成开源文档(原)

作者这里以osgearth文档为例,感觉这种生成文档的方式比较好,生成的html文档是支持搜索的,感谢开源工作者的奉献.赞一个 1. 下载并安装python for windows:https://www.python.org/downloads/windows/ 2.下载安装setup tools下载easy_stall.py 并运行https://pypi.python.org/pypi/setuptools#windows-7-or-graphical-install,可以找到window

iOS开发日记23-Xcode生成API文档(HeaderDoc)

今天博主有一个Xcode生成API文档的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 今天公司和客户交接源码,但是客户提出不仅需要源码,还需要相应的技术文档,今天博主就和大家分享一下,如何使用Xcode生成你的技术文档. 生成技术文档主要有三个工具: headerdoc, doxygen 和 appledoc.其中headerdoc是苹果官方的生成工具,后两个是第三方工具.如果Xcode版本更新,则需要重新配置第三方工具,个人感觉虽然功能强大,但是配置繁琐,推荐大家使用header

9.9 Python 文档字符串

9.9 Python 文档字符串. 进入 Python 标准库所在的目录. 检查每个 .py 文件看是否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会生成一个漂亮的清单. 里边列出哪些模块有文档字符串, 以及文档字符串的内容. 清单最后附上那些没有文档字符串模块的名字. import os #import pdb path2search = '/System/Library/Frameworks/Python.framework/Versions

【Unity3D】【NGUI】本地生成API文档

原地址:http://blog.csdn.net/u012091672/article/details/17438135 NGUI讨论群:333417608 1.安装Doxygen(http://www.stack.nl/~dimitri/doxygen/) 2.配置 1)工程名 2)版本 3)源代码目录(根据自己的修改) 4)递归扫描(包含子目录) 5)输出目录 1)只输出可以被文档化的实体 2)c#文档优化 1)有导航栏 2)不使用排版 1)随便指定个目录(用来保存配额) 2)切换到运行界面