有没有办法在Sphinx中预先构建autodoc生成的.rst文件

时间:2015-03-10 22:26:42

标签: python python-sphinx autodoc read-the-docs

我有一个项目,我使用sphinx.ext.apidoc构建了一组.rst文件,从项目的文档字符串中提取文档。

这些文件如下所示:

Submodules
----------
.. toctree::
   mymodule.submodule

Module contents
---------------

.. automodule:: mymodule
   :members:
   :undoc-members:
   :show-inheritance:

make html在我的计算机上正确构建文档,但要求我编辑conf.py文件以将我的项目添加到python系统路径,以便它正确找到.rst中提到的模块autodoc尝试导入文件时的文件。

但是,当我尝试在readthedocs上构建文档时,autodoc无法找到引用的模块,因为我不知道需要将哪条路径添加到autodoc的python系统路径中以正确查找项目模块

我想知道是否可以在本地环境中使用autodoc预先构建.rst文件,这样它们就不再包含对autodoc的任何调用,然后将它们上传到readthedocs,这样就没有了需要在那里运行autodoc扩展。

如果无法做到这一点,那么解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

经过一些修改后,解决方案由readthedocs FAQ提供:为了使依赖于C的模块无法通过pip readthedoc构建内的venv轻松安装,有必要模拟它们以及您在文档的conf.py目录中的myproject/docs/source文件中导入的所有子模块(或者您的Sphinx conf.py所在的位置)。 就我而言,代码如下:

if on_rtd:
    warn('debug -syspath -edit: %s'%os.path.abspath('../..'))
    sys.path.insert(0, os.path.abspath('../..'))

    class Mock(MagicMock):

        @classmethod
        def __getattr__(cls, name):
            return Mock()

        @classmethod
        def __getitem__(cls, name):
            return Mock()


    MOCK_MODULES = ['numpy',
                    'scikit-learn',
                    'pymongo',
                    'cython',
                    'Cython',
                    'matplotlib',
                    'matplotlib.pyplot',
                    'scipy',
                    'scipy.stats',
                    'scipy.sparse',
                    'scipy.sparse.linalg',
                    'scipy.sparse.csgraph',
                    'scikits',
                    'scikits.sparse',
                    'scikits.sparse.cholmod',
                    'sklearn',
                    'sklearn.cluster',
                    'python-Levenshtein'
                    'levenstein',
                    'python.levenstein'
                    ]

    for mod_name in MOCK_MODULES:
        sys.modules.update({mod_name: Mock()})