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 を使用して、さまざまなモジュールの docstring の html 表現を作成しています。私のローカル マシンではすべて正常に動作しますが、ドキュメントを読むには PyQt4 が必要なので 、mock次の問題に遭遇しました: 私の GUI クラスの 1 つで、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)   

したがって、クラッシュします。[Install your project inside a virtualenv using setup.py install] を選択してパッケージを仮想環境にビルドしようとしましたが 、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 とのメタクラスの競合) で同様の問題が発生しました。私の回避策は、unittest.mock を使用する代わりに、conf.py でモジュールを手動でモックすることです。

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 に答える