Sphinx autodoc在第三方包导入错误时崩溃

4 投票
2 回答
2733 浏览
提问于 2025-04-17 17:10

有没有办法在使用sphinx-python时排除模块的导入部分,并且还能正常生成文档呢?我有一个模块,它导入了另一个包(是个不同的项目),然后sphinx就报了这个错误:

""" 文件 "/usr/local/lib/python2.7/dist-packages/Sphinx-1.1.3-py2.7.egg/sphinx/ext/autodoc.py",第321行,在 import_object import(self.modname) 文件 "/home/x/GitHub/project/mod_example1.py",第33行,在 from other_pck import Klass, KlassStuff 导入错误:没有名为 other_pck 的模块 """

如果我把调用/导入那个包的模块中的导入部分注释掉,sphinx就可以正常生成文档了。我尝试了所有的sphinx自动文档模块:autoclass、automodule等等……但每次只要它试图导入那个其他包,结果都是一样的。

谢谢

2 个回答

0

有时候,你用来生成文档的机器上没有安装Python项目需要的第三方包。比如说,我现在的机器上没有安装pytorch,所以无法写文档。你可以通过在conf.py文件中添加以下内容来“模拟”这些需要的包。

autodoc_mock_imports = ['packages', 'to', 'mock']

在我的情况下,是

autodoc_mock_imports = ['torch']

想了解更多细节,可以查看这篇博客

4

你现在修复问题的方法不对。正确的做法是让Sphinx知道你已经有的其他包,因为它的自动文档功能必须导入Python包来扫描源代码。Python包不能在没有解决所有依赖关系的情况下被导入,而且你不能随便挑选源代码中的某几行,因为这就是Python的工作方式(*)

可能的解决方案有:

*) 理论上你可以这样做,但这超出了Sphinx和这个问题的范围。

撰写回答