如何在Python文件无法编译时使用Sphinx自动文档生成

1 投票
3 回答
1526 浏览
提问于 2025-04-15 14:44

今天这个问题更难了,因为我在Sphinx主页上搜索时运气不好,没找到想要的东西。

我有一组模块想要从文档字符串中生成文档。但是这些模块不是纯粹的Python脚本。它们不能直接编译,因为它们是从一个C#应用程序中运行的,这个应用程序会在执行的环境中创建一个新的变量。

对Python编译器来说,这就像我有一个未定义的方法(实际上确实是这样,直到C#创建了IronPython脚本引擎并定义了这个方法)。

当我运行:

sphinx-build -b html output/html

我得到:

NameError: name 'injected_method' is not defined

我该怎么让Sphinx忽略编译错误,直接生成我的文档呢?

编辑:

如果有人知道有没有其他工具可以替代Sphinx(比如Epydoc),而且不需要编译Python脚本就能获取函数签名和文档字符串,那就太好了。Sphinx是最美观的文档生成工具,但如果必须的话,我也会放弃它。

3 个回答

0

也许你可以把injected_method定义成一个空函数,这样文档就能正常工作了。你需要确保你注入的injected_method的定义是在新的injected_method占位符之后。

#By empty function I mean a function that looks like this
def injected_method():
  pass
3

好吧,你可以试试:

  • 把使用 injected_method 的部分放在一个 try/except 里,这样可以捕捉到可能出现的错误。
  • 写一个脚本,过滤掉所有在导入时运行的 Python 代码,然后把结果传给 Sphinx。
  • 你还可以……好吧,我想不出其他办法了。 :)
0

好的,我找到了一种解决错误的方法。

在设置嵌入式脚本环境时,我不再使用:

ScriptScope.SetVariable("injected_method", myMethod);

而是现在使用:

ScriptRuntime.Globals.SetVariable("injected_method", myMethod);

然后,在脚本中:

import injected_method

接着,我在我的搜索路径中创建了一个空的 dummy injected_method.py 文件。在我构建 C# 项目时,我会删除这个空文件,以避免任何冲突。

撰写回答