software how example code apidoc python documentation python-sphinx

python - how - sphinx-build fail-autodoc no puede importar/encontrar módulo



sphinx python (7)

Estoy tratando de comenzar con Sphinx y parece tener problemas implacables.

Comando: docs/sphinx-quickstart

Respondo a todas las preguntas y todo funciona bien.

Comando: docs/ls

Todo se ve normal. Resultado: build Makefile source

Comando: sphinx-build -d build/doctrees source build/html

Parece funcionar. Pude abrir el archivo index.html y ver un "shell" de lo que quiero.

Cuando intento poner mi código fuente real como la carpeta de source me encuentro con problemas.

Comando: sphinx-build -d build/doctrees ../ys_utils build/html

Resultado:

Making output directory... Running Sphinx v1.1.3 loading pickled environment... not yet created No builder selected, using default: html loading intersphinx inventory from http://docs.python.org/objects.inv... building [html]: targets for 1 source files that are out of date updating environment: 1 added, 0 changed, 0 removed Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object __import__(self.modname) ImportError: No module named ys_utils Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object __import__(self.modname) ImportError: No module named ys_utils.test_validate_ut Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object __import__(self.modname) ImportError: No module named ys_utils.git_utils Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object __import__(self.modname) ImportError: No module named setup.setup /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:4: WARNING: autodoc can''t import/find module ''ys_utils'', it reported error: "No module named ys_utils", please check your spelling and sys.path /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:10: WARNING: autodoc can''t import/find module ''ys_utils.test_validate_ut'', it reported error: "No module named ys_utils.test_validate_ut", please check your spelling and sys.path /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:12: WARNING: don''t know which module to import for autodocumenting u''UnitTests'' (try placing a "module" or "currentmodule" directive in the document, or giving an explicit module name) /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:18: WARNING: autodoc can''t import/find module ''ys_utils.git_utils'', it reported error: "No module named ys_utils.git_utils", please check your spelling and sys.path /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:24: WARNING: autodoc can''t import/find module ''setup.setup'', it reported error: "No module named setup.setup", please check your spelling and sys.path WARNING: master file /home/ricomoss/workspace/nextgen/ys_utils/index.rst not found looking for now-outdated files... none found pickling environment... done checking consistency... /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:: WARNING: document isn''t included in any toctree done preparing documents... done writing output... [ 50%] index Exception occurred: File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/environment.py", line 1213, in get_doctree f = open(doctree_filename, ''rb'') IOError: [Errno 2] No such file or directory: ''/home/ricomoss/workspace/nextgen/docs/build/doctrees/index.doctree'' The full traceback has been saved in /tmp/sphinx-err-jjJ7gM.log, if you want to report the issue to the developers. Please also report this if it was a user error, so that a better error message can be provided next time. Either send bugs to the mailing list at <http://groups.google.com/group/sphinx-dev/>, or report them in the tracker at <http://bitbucket.org/birkenfeld/sphinx/issues/>. Thanks!

Soy un novato de Sphinx y soy relativamente nuevo en este tipo de documentación. ¿Alguien puede ofrecer algunas sugerencias?

Editar:

Me gustaría poder usar un Makefile para manejar esto. A partir de ahora tengo dos carpetas en mi proyecto.

nextgen/ls

docs ys_utils

Necesito nextgen/docs/Makefile para generar el HTML para ys_utils y todos los demás módulos que voy a tener.


Autodoc no puede encontrar sus módulos, porque no están en sys.path .

sys.path incluir la ruta a sus módulos en sys.path en su conf.py Mire la parte superior de su conf.py (justo después de la importación de sys ), hay una declaración sys.path.insert() , que puede adaptar.

Por cierto: puede usar el Makefile creado por Sphinx para crear su documentación. Solo llama

make

para ver las opciones.

Si algo salió mal antes de intentarlo:

make clean

Antes de ejecutar make html .


Creo que hice esto la primera vez que intenté agregar un archivo al toctree. Creo que fue porque dejé la línea en blanco entre la línea: maxdepth y el nombre del archivo.

.. Animatrix Concepts documentation master file, created by sphinx-quickstart on Thu Mar 22 18:06:15 2012. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to Animatrix Concepts documentation! ============================================ Contents: .. toctree:: :maxdepth: 2 stuff Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search`

Arriba está mi archivo index.rst. stuff.rst reside en el mismo directorio que este.


Intenté usar Autodoc para documentar el código de mi esfinge, pero saltearía uno de mis archivos porque no formé una clase dentro de ese archivo. Esto es lo que el archivo originalmente se parecía a esto:

""" testing autodoc - this should be first line in doc """ import simulator world = simulator.simulator() #some more code...

Este archivo nunca podría ser documentado con éxito por la esfinge. Para documentarlo, tuve que hacer lo siguiente:

""" testing autodoc - this should be first line in doc """ import simulator class runme(): def __init__(self): world = simulator.simulator() #some more code... if __name__ == "__main__": runme()

Entonces, parece que Sphinx requiere que envuelvas todos tus archivos en una clase para documentarlos. Espero que eso ayude, porque pasé horas tratando de averiguar por qué Sphinx no estaba documentando


Parece que os.path.append() está funcionando bien para la gente, pero si sigue la plantilla conf.py , insertará la ruta del módulo al frente de sys.path usando os.path.insert(0, ...) , y solo agrega un extra .

import os import sys sys.path.insert(0, os.path.abspath(''..''))

Si ha configurado su proyecto de sphinx para usar directorios de source y bulid separados, esa llamada debería ser:

sys.path.insert(0, os.path.abspath(''../..''))


Puede usar el formato de Pweave y noweb para generar los primeros documentos que incluyen la salida del código incrustado en ellos. Básicamente, usted escribe su primer archivo, con el código de Python incrustado en fragmentos marcados como este:

<<echo=False>>= print("some text that will appear in the rst file") @

y Pweave ejecutará esos trozos y los reemplazará con su salida en un primer archivo resultante, que luego puede usar con la esfinge. Vea el ejemplo de Pweave reST para más detalles de cómo se ve.


Sphinx no es muy compatible con python3 , ejecutando __import__(module_name) Y importlib.import_module(module_name) ambos funcionan en mi intérprete, pero no en la esfinge.

Intenté verificar la rama maestra de la esfinge, cambié mi intérprete a python3.4 en el Makefile y obtuve errores en los módulos que se eliminaron en la serie 3.x. Puedes ver el informe de mi problema aquí:

https://github.com/sphinx-doc/sphinx/issues/2046


en conf.py

simplemente agregue la ruta a su carpeta de proyecto.

sys.path.append(''/home/workspace/myproj/myproj'')