python-如何在readthedocs上记录cython函数
作者:互联网
在ReadTheDocs上,我不允许编译cython扩展名,是否可以配置sphinx以便从cython文件中提取文档字符串而无需实际编译它们?
谢谢!
解决方法:
我遇到了同样的问题,发现现在可以在readthedocs上编译Cython扩展了.
简短答案:Cython模块可以使用readthedocs提供的virtualenv功能进行编译.
有关稍长的答案和示例项目,请参见下文.
问题是什么?
据我了解,sphinx导入了将要记录的项目的所有模块,然后在python中提取文档字符串.对于Cython模块,此操作将失败,因为它们无法直接导入,必须先进行编译.在readthedocs上开箱即用,无法编译模块,但是它们提供了实现此目的的工具.
如何解决这个问题.
在virtualenv中安装项目时,将构建Cython模块(到.so文件中),然后可以将其导入.不过,这可能需要一些外部模块(以下示例为numpy,当然也包括Cython).这些可以在必须位于您的存储库中的pip requirements file(requirements.txt)中指定.
>启用该选项,即可在Admin->下将您的项目安装在virtualenv中.阅读文档的高级设置
>输入相对于项目根目录的requirements.txt的路径(在下面的示例中为docs / requirements.txt)
>(如有必要,请更改python解释器版本)
现在,每次构建文档时都会安装您的项目(使用python setup.py install).如果您在readthedocs的Builds选项卡中单击相应的版本,则可以在Setup Output下看到安装脚本的输出.这是可能出现编译时错误的地方.请注意,编译项目可能需要一些时间.
示例项目
一个Python包,包含多个Cython模块,每个模块都有Google-style docstrings.
my_project/
setup.py
my_package/
__init__.py # imports Cython modules
cython_module1.pyx
cython_module2.pyx
...
docs/
requirements.txt
Makefile
source/
conf.py
index.rst
... # more documentation
requirements.txt
cython>=0.20
numpy>=1.9
买者(S)
在我的项目上尝试时,我遇到了无法导入Cython模块的问题. Sphinx的错误消息显示为:
home/docs/checkouts/readthedocs.org/user_builds/... :4: WARNING: autodoc: failed to import module 'cython_module1';...
File "/home/docs/checkouts/readthedocs.org/user_builds/.../__init__.py", ...
from .cython_module1 import CythonClass
发生这种情况是因为我曾经在本地构建文档,并添加了类似
...
sys.path.insert(0, os.path.abspath('../../')) # path to my_package
...
到我的conf.py,建议为here.这已经解决了我在本地构建时的问题(在这里我使用python setup.py build_ext –inplace编译了我的项目),但是在virtualenv中安装时,这指向了错误的my_package版本(即来源,而不是已安装的软件包).那里狮身人面像找不到任何要导入的.so文件.
要解决此问题,只需完全删除该行.
我希望这有帮助.
标签:python,cython,python-sphinx 来源: https://codeday.me/bug/20191010/1887029.html