2017-06-01 5 views
0

Ich habe derzeit einen Anwendungsfall, in dem ich Python-Klassen in Modulen mit dem folgenden Code erstellen.Automatische Generierung von Python-Dokumentation mithilfe von Sphinx bei Verwendung dynamischer Klassen und dynamischer Module

... 
module = type.ModuleType(module_name) 
... 
klass = type(name, (object,), dict(__doc__='docstring')) 
... 
setattr(module, name, klass) 
... 

Sphinx kann jedoch keine Dokumentation für diese Klassen generieren. Es ist nicht einmal in der Lage, die Klassen zu finden. Gibt es eine Möglichkeit, Sphinx eine Erweiterung hinzuzufügen, um diesen Anwendungsfall zu behandeln? Gedanken?

Das vollständige minimale Arbeitsbeispiel hierfür befindet sich here.

+0

erzeugt sie, wenn das Modul importiert wird? – jonrsharpe

+0

Ja, das sind sie. Die Submodule werden in der Datei ['__init __. Py'] (https://github.com/kdheepak/dynamic-classes/blob/master/modules/__init__.py) erstellt. – kdheepak

Antwort

1

Sie haben die folgende automodule Richtlinie in modules.rst:

.. automodule:: modules 
    :members: 
    :undoc-members: 
    :show-inheritance: 

Aber die qualifizierten Namen der dynamischen Module sind modules.Module1 und modules.Module2 (diese Namen sind sys.modules in _factory.py hinzugefügt).

Die folgenden Werke für mich:

.. automodule:: modules.Module1 
    :members: 
    :undoc-members: 
    :show-inheritance: 

.. automodule:: modules.Module2 
    :members: 
    :undoc-members: 
    :show-inheritance: 
+0

Danke für die Antwort! Das hat es gelöst! So scheint es das Problem ist dann mit 'Sphinx-Apidoc'? Da ich das verwendet habe, um die Datei 'modules.rst' zu erzeugen. – kdheepak

+0

Ja, ich denke schon. sphinx-apidoc sucht nach "normalen" Modulen und ist nicht schlau genug, um daraus abzuleiten, dass es dynamisch erzeugte Module gibt. – mzjn

Verwandte Themen