我正在使用Sphinx-autodoc为我的 Python 包生成 API 文档。
最初我使用 Conda 来安装 readthedocs 上的完整依赖项,但构建时间太长,有时甚至失败(#4695)。 所以,我切换到纯pip
(https://github.com/JiaweiZhuang/xESMF/commit/53816d397b3c8f27b195132b27dbb41847e34e0f),这大大加快了构建速度。 但是,自从那次切换之后,Sphinx-autodoc 无法生成 API 文档。 我的API 页面几乎是空白的:
这是因为我的包本身具有无法由pip
安装的严重依赖项。 某些 C/Fortran 扩展必须由conda
。 所以,autodoc 不能导入我的包:
WARNING: autodoc: failed to import module 'xesmf.frontend'; the following exception was raised:
No module named 'xesmf'
WARNING: autodoc: failed to import module 'xesmf.backend'; the following exception was raised:
No module named 'xesmf'
...
我能够使用 pip在本地生成正确的 API 文档,使用两个技巧:
pip install --no-deps xesmf
强制安装我的包。conf.py
添加autodoc_mock_imports = ['numpy', 'xarray', 'scipy', 'ESMF']
来模拟导入依赖项。 其中, ESMF是一个极其重的依赖,只能通过 Conda 安装(并且需要很长时间才能安装)。即使使用autodoc_mock_imports
,我仍然需要 pip 安装我的包xesmf
以提供 sphinx-autodoc 的文档字符串。 我已阅读阅读文档配置文件,但找不到指定--no-deps
选项或添加自定义 pip 命令的方法。
目前,我只能想到两个非常不满意的解决方案来正确在线构建 API 文档:
setup.py
,这样我就可以在没有--no-deps
选项的情况下安装它。 这对我的包裹本身不利。所以我仍在寻找更好的解决方案。 任何建议,将不胜感激!
以下是在我的笔记本电脑上构建正确文档的完整步骤:
conda create -n doc python=3.6
conda activate doc
conda install -c conda-forge pandoc
pip install numpydoc ipython nbsphinx sphinx_rtd_theme
pip install --no-deps xesmf
git clone https://github.com/JiaweiZhuang/xesmf
cd xesmf/doc
make html
正确的 API 页面如下所示:
我认为我们不会为 pip 添加更多选项,抱歉。 我想到的一种解决方案是使用READTHEDOCS
变量https://docs.readthedocs.io/en/stable/faq.html#how -do-i-change-behavior-for-阅读 setup.py 文件中的文档。
如果您需要一些依赖项,您可以仅为您的文档创建一个自定义需求文件。
@stsewd感谢您的建议! 我调整了setup.py
以便:
on_rtd = os.environ.get('READTHEDOCS') == 'True'
if on_rtd:
INSTALL_REQUIRES = []
else:
INSTALL_REQUIRES = ['esmpy', 'xarray', 'numpy', 'scipy']
(https://github.com/JiaweiZhuang/xESMF/commit/5ce3364bfbd3081aad848c5cf4ac54a287ca236e)
感觉有点hacky,但确实解决了问题。 再次感谢。
最有用的评论
@stsewd感谢您的建议! 我调整了
setup.py
以便:(https://github.com/JiaweiZhuang/xESMF/commit/5ce3364bfbd3081aad848c5cf4ac54a287ca236e)
感觉有点hacky,但确实解决了问题。 再次感谢。