1

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

这些文件如下所示:

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

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

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

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

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

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

如果没有办法做到这一点,那么解决该问题的正确方法是什么?

4

1 回答 1

0

经过一番修改,readthedocs 常见问题解答提供了解决方案:为了依赖于 C 并且无法pip在readthedoc 构建中轻松安装的模块,有必要模拟它们以及您在文件中venv导入的所有子模块您conf.pymyproject/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()})
于 2015-09-22T21:38:43.467 回答