我有一个小型Windows模块,它依赖于ctypes核心模块。在项目RTD站点上,该模块的页面为空。看看最近几乎成功的构建日志https://readthedocs.org/builds/apt/2900858/有使html阶段失败。ctypes的模拟导入失败,操作数不受支持阅读文档
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的。从我所知道的,但我绝不是在这方面的专家,这是因为嘲笑本身缺少一些数学函数:在错误导致只有3个搜索命中,最相关的约
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'
研究模拟失踪(至少)一个真正的分裂运营商:https://mail.python.org/pipermail/python-bugs-list/2014-March/235709.html
我遵循正确的道路? ctypes可以在RTD项目中使用,我只需要坚持下去,还是需要放弃并从本地机器使用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的横交的。一周后零回答,所以我看起来更远。 //
如何创建'wintypes.BYTE'(你没有说过你如何嘲笑'ctypes')?它需要是一个'MagicMock'对象而不是'Mock'对象。 (或者你需要在你的模拟对象上配置__mul__'魔术方法。http://www.voidspace.org.uk/python/mock/magicmock.html#magic-mock – Dunes
对不起@Dunes,不知道如何除了上面发布的内容之外,我还没有添加任何其他模拟代码,作为Sphinx conf.py的一部分。除了try:除py2/3之外,它与关于如何使用mock的RTD FAQ相同。已经翻阅了你链接的页面,但它已经全部结束了。 –
至于如何创建'wintypes.BYTE',就是[这里](https://github.com/maphew/apt/blob/master/knownpaths .py#L13),并且包含在我的模块的源代码树中。 –