我有一个使用 epydoc 记录的项目。现在我正在尝试切换到狮身人面像。我为 epydocs 格式化了我所有的文档字符串,使用 B{}、L{} 等进行粗体、链接等,并使用 @param、@return、@raise 等来解释输入、输出、异常等。
所以现在我切换到狮身人面像,它失去了所有这些功能。有没有一种自动方法可以将为 epydocs 格式化的文档字符串转换为为 sphinx 格式化的文档字符串?
为了扩展Kevin Horn的答案,可以在由autodoc-process-docstring事件触发的事件处理程序中动态翻译文档字符串。
下面是一个小演示(通过将代码添加到 conf.py 来尝试(。它用:
替换了一些常见的Epytext字段中的@
字符,用于相应的狮身人面像字段。
import re
re_field = re.compile('@(param|type|rtype|return)')
def fix_docstring(app, what, name, obj, options, lines):
for i in xrange(len(lines)):
lines[i] = re_field.sub(r':1', lines[i])
def setup(app):
app.connect('autodoc-process-docstring', fix_docstring)
Pyment是一个可以转换Python文档字符串并创建缺失骨架的工具。它可以管理Google,Epydoc(javadoc风格(,Numpydoc,reStructuredText(reST,Sphinx默认(文档字符串格式。
它接受单个文件或文件夹(也浏览子文件夹(。对于每个文件,它将识别每个文档字符串格式并将其转换为所需的格式。最后,将生成一个补丁以应用于该文件。
要转换项目:
- 安装皮门特
键入以下内容(您可以使用虚拟环境(:
$ git clone https://github.com/dadadel/pyment.git
$ cd pyment
$ python setup.py install
- 从 Epydoc 转换为狮身人面像
您可以通过执行以下操作将项目转换为 Sphinx 格式 (reST(,这是默认输出格式:
$ pyment /my/folder/project
你可以编写一个狮身人面像扩展,它可以捕获当文档字符串被读取时触发的任何事件(也许是source_read
?(,并即时翻译文档字符串。
我在理论上说是因为:
- 很长一段时间以来,我一直想写这样的东西,但还没有设法解决它。
- 翻译这样的东西总是比看起来更难。
你也可以尝试用Sphinx之外的类似翻译器替换代码中的所有文档字符串,也许使用ast
模块或类似的东西。
一条评论所建议的那样,sphinx-epytext
确实提供了相关的支持。它如何为我工作:
安装它非常简单:
pip install -U sphinx-epytext
它包含一个文件process_docstring.py
,通过将 @
epytext 标记替换为冒号:
将 epytext 标记转换为 reStructuredText 标记。
我发现其中缺少的一些字段是:ivar, var, cvar, vartype
只需将现有列表扩展FIELDS
:
FIELDS.extend(['ivar', 'var', 'cvar', 'vartype'])
Epytext理解变量的@type
,但狮身人面像理解:vartype
。
要解决此问题,请在方法中用较process_docstring
替换以前的。
Sphinx 无法理解的大多数语法或文档字符串部分都报告为警告。您可以通过运行带有 -w <WarningLogFile>
的 sphinx-build
来记录这些警告。根据我的经验,狮身人面像对字段应该如何开始或结束、缺少格式语法等非常敏感。