在读取文档

时间:2015-06-20 06:06:53

标签: python-2.7 read-the-docs

我的小型Windows模块依赖于 ctypes 核心模块。在项目RTD站点上,模块的页面显示为空。查看最近几乎成功的构建日志https://readthedocs.org/builds/apt/2900858/,在 make html 阶段失败。

  File "/var/build/user_builds/apt/checkouts/latest/knownpaths.py", line 5, in <module>
    from ctypes import windll, wintypes
  File "/usr/lib/python2.7/ctypes/wintypes.py", line 23, in <module>
    class VARIANT_BOOL(_SimpleCData):
ValueError: _type_ 'v' not supported

在FAQ条目https://read-the-docs.readthedocs.org/en/latest/faq.html#i-get-import-errors-on-libraries-that-depend-on-c-modules之后我尝试使用mock伪造导入ctypes,但这样做会导致构建完全失败。据我所知,但我并不是这方面的专家,因为模拟本身缺少一些数学函数:

  File "/var/build/user_builds/apt/checkouts/latest/knownpaths.py", line 13, in GUID
    ("Data4", wintypes.BYTE * 8)
TypeError: unsupported operand type(s) for *: 'Mock' and 'int'

对错误的研究导致只有3次搜索命中,最关键的是Mock缺失(至少)一个真正的除法运算符:https://mail.python.org/pipermail/python-bugs-list/2014-March/235709.html

我是否走正确的道路?可以在RTD项目中使用ctypes,我只需要坚持下去,或者我是否需要放弃并只使用本地机器中的sphinx?

以下是my conf.py的当前模拟块:

try:
    #py3 import
    from unittest.mock import MagicMock
except ImportError:
    #py27 import
    from mock import Mock as MagicMock

class Mock(MagicMock):
    @classmethod
    def __getattr__(cls, name):
        return Mock()

MOCK_MODULES = ['ctypes']
sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)

//这是来自https://github.com/rtfd/readthedocs.org/issues/1342的交叉帖子。一周后零回应,所以我看得更远。 //

1 个答案:

答案 0 :(得分:1)

最初我认为它本身就是需要被嘲笑的ctypes,但是 事实证明我需要在离家更近的地方工作,并且嘲笑模块 调用ctypes,而不是ctypes本身

- MOCK_MODULES = ['ctypes']
+ MOCK_MODULES = ['knownpaths']

感谢@Dunes,我认为他的评论偏离了轨道并且无法提供帮助。然而,它给了我足够的思绪和调查路径,让我在正确的地方找到了。当他们第一次引起人们的注意时,并不是所有的教导都像教学一样。 ; - )