ReadTheDocs不会为使用Matplotlib的项目自动生成API文档

时间:2015-11-01 23:06:43

标签: python matplotlib mocking read-the-docs

我可以使用Sphinx在本地自动生成项目的API文档,但是当我尝试使用ReadTheDocs时遇到了麻烦。当ReadTheDocs构建文档时,API页面都是空白的(例如,请参阅this)。在我阅读this blog entry之后,我意识到解决方案是模拟像numpy和matplotlib这样的东西。所以我将以下行添加到conf.py

autodoc_mock_imports = ['numpy', 'matplotlib', 'matplotlib.pyplot', 'matplotlib.patches', 'matplotlib.path', 'matplotlib.lines', 'matplotlib.text', 'matplotlib.transforms', 'matplotlib.artist', 'cpickle']

由于以下两个Sphinx问题,我无法在本地或ReadTheDocs上构建API文档。

问题#1:

当我构建文档时,我收到以下错误。

/Users/Ben/Documents/Python/clearplot/doc/source/api/clearplot.rst:19: WARNING: autodoc: failed to import module u'clearplot'; the following exception was raised:
Traceback (most recent call last):
File "/Users/Ben/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 385, in import_object
__import__(self.modname)
File "/Users/Ben/Documents/Python/clearplot/clearplot/__init__.py", line 33, in <module>
mpl_version = _parse_version_string(_mpl.__version__)
File "/Users/Ben/Documents/Python/clearplot/clearplot/__init__.py", line 19, in _parse_version_string
v_list = v.split(".")
AttributeError: type object '__version__' has no attribute 'split'

我已确认此错误来自于matplotlib.__version__.split(".")。我无法弄清楚如何快速解决这个问题,所以我对它进行了评论。

问题#2:

现在,我在构建文档时遇到以下错误。

/Users/Ben/Documents/Python/clearplot/doc/source/api/clearplot.rst:19: WARNING: autodoc: failed to import module u'clearplot'; the following exception was raised:
Traceback (most recent call last):
File "/Users/Ben/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 385, in import_object
__import__(self.modname)
File "/Users/Ben/Documents/Python/clearplot/clearplot/__init__.py", line 45, in <module>
import params
File "/Users/Ben/Documents/Python/clearplot/clearplot/params.py", line 19, in <module>
_mpl.rcParams['backend'] = 'Qt4Agg'
TypeError: '_MockModule' object does not support item assignment

如果我注释掉有问题的行(_mpl.rcParams['backend'] = 'Qt4Agg'),我会在下一行收到相同的错误,因为我的params模块已经完成了对matplotlib.rcParams字典的分配。

这两个问题看起来都很难解决。有没有更好的办法?如果没有,我该如何解决问题#1和#2?

从阅读this开始,看起来有一个解决方法是使用带有模拟的字典。我是否应该搜索类似的解决方案,以使用来自matplotlib.__version__的字符串基本内容?

如果有帮助,github上的代码为here

0 个答案:

没有答案