У меня есть небольшой модуль Windows, который опирается на ctypes. На сайте RTD проекта страница для модуля появляется пустым. Рассматривая последний почти успешный журнал построения https://readthedocs.org/builds/apt/2900858/, есть ошибка во время make html stage.Ошибка при загрузке ctypes с неподдерживаемым операндом на Read The Docs
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
После вступления Справки https://read-the-docs.readthedocs.org/en/latest/faq.html#i-get-import-errors-on-libraries-that-depend-on-c-modules Я попытался подделать импорт ctypes использования mock
, но при этом привести к выпадению сборки полностью. Из того, что я могу сказать, но я не означает, что специалист в этой области, это потому, что издеваться сам отсутствуют некоторые математические функции:
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 поисковых попаданий, наиболее релевантные о Отсутствует (по крайней мере) истинный оператор деления: 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
sorry @Dunes, не знаю, как Ответ: Я еще не добавил какой-либо макет кода, кроме опубликованного выше, как часть Sphinx conf.py. За исключением попытки: кроме: для py2/3 он идентичен частоте RTD о том, как использовать mock. «Прочитайте страницу, которую вы связали, но все это на моей голове. –
как для создания' wintypes.BYTE', это [здесь] (https://github.com/maphew/apt/blob/master/knownpaths .py # L13) и включен в исходное дерево моего модуля. –