Sphinx autodoc在第三方包导入错误时崩溃
有没有办法在使用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 个回答
有时候,你用来生成文档的机器上没有安装Python项目需要的第三方包。比如说,我现在的机器上没有安装pytorch
,所以无法写文档。你可以通过在conf.py
文件中添加以下内容来“模拟”这些需要的包。
autodoc_mock_imports = ['packages', 'to', 'mock']
在我的情况下,是
autodoc_mock_imports = ['torch']
想了解更多细节,可以查看这篇博客。
你现在修复问题的方法不对。正确的做法是让Sphinx知道你已经有的其他包,因为它的自动文档功能必须导入Python包来扫描源代码。Python包不能在没有解决所有依赖关系的情况下被导入,而且你不能随便挑选源代码中的某几行,因为这就是Python的工作方式(*)
可能的解决方案有:
创建一个Python虚拟环境,在这个环境中同时安装Sphinx和其他包,这样它们就可以互相识别。你可以参考这个链接了解更多:http://opensourcehacker.com/2012/09/16/recommended-way-for-sudo-free-installation-of-python-software-with-virtualenv/
设置PYTHONPATH环境变量,或者在Sphinx的配置文件中编辑sys.path,这样在运行Sphinx时就能把缺失的包添加到导入列表中。更多信息可以查看这个链接:http://scienceoss.com/minimal-sphinx-setup-for-autodocumenting-python-modules/
*) 理论上你可以这样做,但这超出了Sphinx和这个问题的范围。