Come usare Sfinge auto-documentazione quando il file Python non compilerà
-
19-09-2019 - |
Domanda
Questa domanda è ancora più difficile oggi perché non ho avuto alcuna fortuna utilizzando la funzione di ricerca nella home page Sfinge oggi.
Ho un gruppo di moduli che voglio essere documentati dalle docstring. Tuttavia, questi non sono gli script Python puri. Essi non compilare come è, perché sono gestiti da un'applicazione C # che crea una nuova variabile nel campo di applicazione di esecuzione.
Per il compilatore Python, sembra che io ho un metodo non definito (che, tecnicamente io fare, fino a quando C # crea il motore di script IronPython e crea il metodo).
Quando eseguo:
sphinx-build -b html output/html
ottengo:
NameError: name 'injected_method' is not defined
Come faccio ad avere Sfinge di ignorare errori di compilazione e solo generare la mia documentazione?
EDIT:
Se qualcuno sa se in alternativa alla Sfinge (come Epydoc) non deve compilare lo script Python per ottenere le firme di funzione e docstring, che sarebbe utile pure. Sfinge è il miglior generatore di documentazione cercando, ma io abbandonarlo se devo.
Soluzione 3
Va bene, ho trovato un modo per aggirare gli errori.
Quando si imposta l'ambiente di scripting embedded, invece di usare:
ScriptScope.SetVariable("injected_method", myMethod);
Ora sto usando:
ScriptRuntime.Globals.SetVariable("injected_method", myMethod);
E poi, nello script:
import injected_method
Poi ho creato un file injected_method.py fittizio nel mio percorso di ricerca, che è vuoto. A cancellare il file fittizio durante la costruzione del mio progetto C # per evitare eventuali conflitti.
Altri suggerimenti
Bene, si potrebbe provare:
- Avvolgere l'utilizzo di injected_method in un try / except.
- Scrittura di uno script che filtra tutti python-codice che viene eseguito in tempo di importazione, e alimenta il risultato in Sfinge.
- Si potrebbe .... ok, non ho più idee. :)
Forse si potrebbe definire come una funzione injected_method vuoto in modo che la documentazione funzionerà. Avrai bisogno di fare in modo che la definizione di injected_method che si sta iniettando accade dopo il nuovo stub injected_method.
#By empty function I mean a function that looks like this
def injected_method():
pass