我有一个项目,我使用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扩展。
如果无法做到这一点,那么解决这个问题的正确方法是什么?
答案 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()})