我目前正在通过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模块的文档,但这不应该是最终的解决方案。感谢。
答案 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仍然没有工作(没有输出),虽然构建通过......
当然很乏味。