Pregunta

Esta pregunta es aún más difícil hoy porque no he tenido suerte usando la función de búsqueda en la página principal Esfinge hoy.

Tengo un grupo de módulos que quiero ser documentada a partir de los docstrings. Sin embargo, estos no son los scripts de Python. No van a compilar tal cual, ya que se ejecutan desde una aplicación de C # que crea una nueva variable en el ámbito de ejecución.

Para el compilador Python, parece que tengo un método no definido (que, técnicamente, hacer, hasta que C # crea el motor de scripts IronPython y crea el método).

Cuando corro:

sphinx-build -b html output/html

Me sale:

NameError: name 'injected_method' is not defined

¿Cómo llego Sphinx para ignorar los errores de compilación y simplemente generar mi documentación?

EDIT:

Si alguien sabe si una alternativa a la Esfinge (como Epydoc) no tiene que compilar la secuencia de comandos de Python para obtener las firmas de función y cadenas de documentación, que serían útiles también. Sphinx es el mejor generador de documentación mirando, pero voy a abandonarlo si tengo que hacerlo.

¿Fue útil?

Solución 3

Bueno, he encontrado una manera de evitar los errores.

Cuando la configuración del entorno de scripting embebido, en lugar de utilizar:

ScriptScope.SetVariable("injected_method", myMethod);

Ahora estoy usando:

ScriptRuntime.Globals.SetVariable("injected_method", myMethod);

Y luego, en la secuencia de comandos:

import injected_method

A continuación, he creado un archivo ficticio injected_method.py en mi camino de búsqueda, que está en blanco. Elimino el archivo de prueba durante la construcción de mi proyecto de C # para evitar cualquier conflicto.

Otros consejos

Bueno, usted podría intentar:

  • Envolver el uso de injected_method en un try / except.
  • Escribir un guión que filtra todos pitón de código que se ejecuta en tiempo de importación, y alimenta el resultado en Sphinx.
  • Usted podría .... bien, no tengo más ideas. :)

Tal vez se podría definir como una función injected_method vacío, por lo que la documentación va a funcionar. Tendrá que asegurarse de que la definición de injected_method que está inyectando sucede después de que el nuevo talón de injected_method.

#By empty function I mean a function that looks like this
def injected_method():
  pass
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top