防止Sphinx执行模块

5
我正在尝试使用Sphinx生成Python文档。问题在于sphinx-build最终会执行模块/评估全局范围内的任何内容。这样做的原因是什么?有没有任何标志可以设置来禁用它?
看起来Sphinx似乎在尝试执行代码覆盖或类似的操作,这绝对不是我想要的。通常这不是问题,但特定一组模块非常特定于一个环境。

是的,当使用autodoc时,模块被sphinx导入是很正常的。这样做是为了检索docstrings、类和函数信息等。您能提供更多的信息吗?它是如何停止的?有什么错误信息吗? - cedbeu
1个回答

6

Sphinx会在全局范围内对所有内容进行评估,因为autodoc插件需要导入模块,在导入模块时会对全局作用域进行评估。

为了停止这个过程,你可以选择:

  • 禁用autodoc插件(在sphinx配置文件中搜索autodoc)或
  • 使用类似于if __name__ == "__main__": do_stuff()的代码来保护你不想执行的代码。

啊——是的,这很方便,因为我所拥有的少量全局变量只有在模块作为脚本运行时才相关。我可以将它们放在那个语句里面。谢谢! - djp
有没有可能在不导入模块的情况下使用autodoc?例如,如果我们只需要autodoc来读取/解析docstring(不包含任何测试或任何形式的花哨代码解释,只是纯文本)。导入所有项目依赖项以读取docstrings似乎有点过度杀伤力。 - cglacet
3
我认为仅为了获取文档字符串而执行代码是非常糟糕的设计,这会将构建时间转换为运行时间。他们可以像其他已知的代码文档生成器一样解析代码并提取文档字符串。 - mnesarco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接