¿Cómo enlazar correctamente a la documentación de PyQt5 usando intersphinx?

Estoy teniendo algunos problemas al intentar enlazar a los documentos de intersphinx usando intersphinx .

Tratar de hacer una referencia cruzada a cualquiera de las clases de QtCore (como QThread ) no funciona como esperaba. He analizado el objects.inv disponible aquí usando python -m sphinx.ext.intersphinx objects.inv , que da como resultado una salida que se muestra en esta esencia .

Desafortunadamente, bajo el espacio de nombres de python no hay clases y solo algunas funciones. Todo PyQt5 relacionado con PyQt5 está en el espacio de nombres sip:class . Intentar hacer referencia a esto en la documentación utilizando el estándar :py:class: syntax no se vincula con nada (ya que sphinx no ve esa referencia conectada a nada), y usar :sip:class: provoca una advertencia de Unknown interpreted text role "sip:class" , lo cual tiene sentido porque no es un código de referencia conocido.

Entonces, ¿cómo accedemos a la documentación de PyQt a través de intersphinx (si es que podemos)?

Para que el mapeo de intersphinx funcione para mi proyecto que usa PyQt5 hice lo siguiente:

  1. Descargado el archivo original objects.inv
  2. Se modificó el :sip: domain a ser :py:
  3. Redirigió la URL de la mayoría de los objetos de PyQt para que apunten al sitio web de Qt, lo que significa que, en lugar de dirigirse a PyQt-QWidget, cuando alguien hace clic en un QWidget en mi documentación, se dirige a Qt-QWidget
  4. Se agregaron alias para que :class:`QWidget` :class:`QtWidgets.QWidget` y :class:`PyQt5.QtWidgets.QWidget` estén todos vinculados a Qt-QWidget

Si desea utilizar mi archivo objects.inv modificado en su propio proyecto, puede descargarlo , guardarlo en el mismo directorio que su archivo conf.py y luego editar su diccionario intersphinx_mapping en su conf.py para que sea

  intersphinx_mapping = { # 'PyQt5': ('http://pyqt.sourceforge.net/Docs/PyQt5/', None), 'PyQt5': ('', 'pyqt5-modified-objects.inv'), } 

Si mi 'pyqt5-modified-objects.inv' no cumple los requisitos para su proyecto (por ejemplo, no QtWidgets alias para todos los módulos Qt, solo QtWidgets , QtCore y QtGui ), entonces puede modificar el código fuente que automáticamente realiza los pasos 1 – 4 anteriores.

El código fuente también se puede usar para crear un archivo objects.inv modificado para PyQt4; sin embargo, el archivo original objects.inv para PyQt4 no contiene una lista completa de todos los módulos y clases Qt y, por lo tanto, el uso del mapeo intersphinx con PyQt4 no es muy útil.

Nota: el equipo de SourceForge actualmente está resolviendo algunos problemas y, por lo tanto, la ejecución del código fuente generará un ConnectionError hasta que se resuelvan sus problemas.