Python 如何在readthedocs上记录cython函数
在上,我不允许编译Python 如何在readthedocs上记录cython函数,python,cython,python-sphinx,Python,Cython,Python Sphinx,在上,我不允许编译cython扩展名,是否可以配置sphinx,以便从cython文件中提取docstring,而不实际编译它们 谢谢 将以下代码段添加到您的conf.py: import sys class Mock(object): def __init__(self, *args, **kwargs): pass def __call__(self, *args, **kwargs): return Mock() @classm
cython
扩展名,是否可以配置sphinx
,以便从cython
文件中提取docstring,而不实际编译它们
谢谢 将以下代码段添加到您的conf.py
:
import sys
class Mock(object):
def __init__(self, *args, **kwargs):
pass
def __call__(self, *args, **kwargs):
return Mock()
@classmethod
def __getattr__(cls, name):
if name in ('__file__', '__path__'):
return '/dev/null'
elif name[0] == name[0].upper():
mockType = type(name, (), {})
mockType.__module__ = __name__
return mockType
else:
return Mock()
MOCK_MODULES = ['pygtk', 'gtk', 'gobject', 'argparse']
for mod_name in MOCK_MODULES:
sys.modules[mod_name] = Mock()
我遇到了同样的问题,发现现在可以在readthedocs上编译Cython扩展 简短回答:Cython模块可以使用readthedocs提供的virtualenv功能进行编译 有关稍长的答案和示例项目,请参见下文 有什么问题? 据我所知,sphinx导入项目中所有需要记录的模块,然后用python提取docstring。这对于Cython模块是失败的,因为它们不能直接导入,必须先编译。在readthedocs上编译模块并不是开箱即用的,但它们提供了实现这一点的工具 如何解决这个问题。 在virtualenv中安装项目时,Cython模块将构建(到.so文件中),然后可以导入。不过,这可能需要一些外部模块(下面的例子是numpy,当然还有Cython)。这些可以在存储库中的(
requirements.txt
)中指定
在VirtualNV中安装项目
requirements.txt
(docs/requirements.txt
在下面的示例中)python setup.py install
)。如果在readthedocs上的Builds选项卡中单击相应的Builds,则可以在setup output下看到安装脚本的输出。这就是编译时错误可能出现的地方。请注意,编译项目可能需要一些时间
示例项目
一个Python包,由几个Cython模块组成,每个模块都有
requirements.txt
警告(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
...
根据建议,转到myconf.py
。这解决了我在本地构建时的问题(在这里我使用python setup.py build\u ext--inplace
)编译了我的项目),但在virtualenv中安装时,这指向了错误版本的myu包(即源代码,而不是安装的包)。sphinx在那里找不到任何要导入的.so文件
要解决此问题,只需完全删除该行
我希望这有帮助。啊,对不起,我误读了你的评论,我以为你想避免RTD中不存在的C扩展相关的错误,所以我的评论无法回答你的问题。欢迎访问该网站!这是一个很好的第一个答案。谢谢,我会在有时间的时候测试它,然后接受答案!
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
...