在read-the-docs中导入PyQt 4

时间:2016-03-29 12:06:48

标签: python-2.7 pyqt4 python-sphinx read-the-docs

我目前正在通过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来构建不同模块的docstring的html表示。在我的本地机器上一切正常,但是,因为我需要在阅读文档上mock PyQt4,我遇到了以下问题:在我的一个GUI类中,我通过<继承QtGui.QDialog / p>

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中安装项目 然而,事实证明,即使pip中列出了PyQt4,也无法安装它,请参阅https://superuser.com/questions/679298/how-to-install-pyqt4-and-what-are-the-practical-differences-between-pyqt4-and-py

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

1 个答案:

答案 0 :(得分:-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仍然没有工作(没有输出),虽然构建通过......

当然很乏味。