4

我目前正在通过 read-the-docs 在线获取我的代码文档,但是,让 read-the-docs 处理我的 PyQt4 依赖模块似乎有问题。

我的项目具有以下结构:

pkg
pkg/__init__.py
pkg/modules/
pkg/modules/__init__.py
pkg/modules/somemodules.py
pkg/gui/__init__.py
pkg/gui/someGUImodules.py

我正在使用 sphinx-autodoc 构建不同模块的文档字符串的 html 表示。在我的本地机器上一切正常,但是,因为我需要 mockPyQt4 阅读文档,我遇到了以下问题: 在我的一个 GUI 类中,我QtGui.QDialog通过子类

class listSelectorDialog(QtGui.QDialog):

    def __init__(self,parent,List):
        super(listSelectorDialog,self).__init__(parent)  

listSelectorDialog通过

class advancedListSelectorDialog(listSelectorDialog):

    def __init__(self,parent,List):
        super(advancedListSelectorDialog,self).__init__(parent,List)

模拟QtGui将导致阅读文档告诉我:

class advancedListSelectorDialog(listSelectorDialog):
TypeError: Error when calling the metaclass bases
str() takes at most 1 argument (3 given)   

并因此崩溃。我尝试通过 使用 setup.py install 选择在 virtualenv 中安装您的项目来将我的包构建到虚拟环境 中,但事实证明,即使 PyQt4 列在中pip,您也无法安装它,请参阅https://superuser。 com/questions/679298/how-to-install-pyqt4-and-what-are-the-practical-differences-between-pyqt4-and-py

到目前为止,我发现的唯一解决方法是,如果环境是 RTD,则不加载 GUI 模块并省略 GUI 模块的文档,但这不应该是最终解决方案。谢谢。

4

1 回答 1

-1

我在 PyQt5/py3 上遇到了类似的问题(与 MagickMock 的元类冲突)。我的解决方法是手动模拟 conf.py 中的模块,而不是使用 unittest.mock:

class PyQt5:
    @staticmethod
    def qVersion():
        return '5.0.0'
    class QtCore:
        class QObject:
            pass
    # etc...
sys.modules['PyQt5'] = PyQt5

这使得导入/元类冲突问题消失了。不幸的是,尽管构建通过了,但 autodoc 仍然不起作用(没有输出)...

当然乏味。

于 2018-01-20T13:50:20.087 回答