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

时间:2009-10-01 21:41:14

标签: python ironpython python-sphinx

今天这个问题更难,因为我今天在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 :(得分:3)

好吧,你可以试试:

  • 在try / except中包装inject_method的用法。
  • 编写一个脚本,过滤掉导入时运行的所有python代码,并将结果提供给Sphinx。
  • 你可以......好吧,我没有更多的想法。 :)

答案 1 :(得分:0)

也许您可以将inject_method定义为空函数,以便文档可以正常工作。您需要确保注入的inject_method的定义发生在新的inject_method存根之后。

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

答案 2 :(得分:0)

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

设置嵌入式脚本环境时,而不是使用:

ScriptScope.SetVariable("injected_method", myMethod);

我现在正在使用:

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

然后,在剧本中:

import injected_method

然后我在搜索路径中创建了一个虚拟的inject_method.py文件,该文件为空白。我在构建C#项目期间删除了虚拟文件以避免任何冲突。