Сбой sphinx-build - autodoc не может импортировать/находить модуль

Я пытаюсь начать работу с Sphinx и, похоже, испытываю неумолимые проблемы.

Команда: docs/sphinx-quickstart

Я отвечаю на все вопросы, и все работает нормально.

Команда: docs/ls

Все выглядит нормально. Результат: build Makefile source

Команда: sphinx-build -d build/doctrees source build/html

Кажется, что сработало. Я смог открыть файл index.html и увидеть "оболочку" того, что мне нужно.

Когда я пытаюсь установить исходный код в качестве папки source, я столкнулся с проблемами.

Команда: sphinx-build -d build/doctrees ../ys_utils build/html

Результат:

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!

Я полный новичок для Sphinx и относительно новичок в этой документации. Кто-нибудь может предложить некоторые предложения?

Edit:

Я бы хотел использовать Makefile для этого. На данный момент у меня есть две папки в моем проекте.

nextgen/ls

docs ys_utils

Мне нужно nextgen/docs/Makefile, чтобы сгенерировать HTML для ys_utils и всех других модулей, которые у меня будут.

Ответ 1

Autodoc не может найти ваши модули, потому что они не находятся в sys.path.

Вы должны указать путь к своим модулям в sys.path в conf.py. Посмотрите на верхнюю часть conf.py (сразу после импорта sys), есть инструкция sys.path.insert(), которую вы можете адаптировать.

Кстати: вы можете использовать Makefile, созданный Sphinx, для создания вашей документации. Просто позвоните

make

чтобы просмотреть параметры.

Если что-то пошло не так, прежде чем попробовать:

make clean

перед запуском make html.

Ответ 2

in conf.py

просто добавьте путь к папке проекта.

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

Ответ 3

Похоже, что os.path.append() работает нормально для людей, но если вы будете следовать шаблону conf.py, вы вставите путь к модулю в начало sys.path используя os.path.insert(0,...) и просто добавить доп .

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

Если вы настроили свой проект sphinx на использование отдельных каталогов build и source, этот вызов должен быть следующим:

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

Ответ 4

Думаю, я сделал это в первый раз, когда попытался добавить файл в toctree. Я думаю, что это произошло потому, что я оставил пустую строку между строкой: maxdepth и именем файла.

.. 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`

Выше мой файл index.rst. stuff.rst находится в том же каталоге, что и он.

Ответ 5

Вы можете использовать Pweave и форматирование noweb для генерации первых документов, содержащих вывод встроенного в них кода. В основном, вы пишете свой первый файл, код python встроен в отмеченные фрагменты следующим образом:

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

а Pweave выполнит эти фрагменты и заменит их своим результатом в результирующем первом файле, который затем вы можете использовать с sphinx. Подробнее о том, как это выглядит, см. Pweave reST.

Ответ 6

Я попытался использовать autodoc для документирования моего кода сфинкса, но он пропустит один из моих файлов, потому что я не создал класс в этом файле. Вот что изначально выглядел файл:

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

Этот файл никогда не будет успешно зарегистрирован с помощью sphinx. Чтобы получить документацию, я должен был сделать следующее:

"""
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()

Итак, похоже, что Sphinx требует, чтобы вы завернули все свои файлы в класс, чтобы получить их документально. надеюсь, что это помогает, потому что я потратил часы, пытаясь понять, почему Сфинкс не документировал

Ответ 7

Я получил ту же ошибку, но она была вызвана совершенно другой причиной, чем объяснено в других ответах.

Моя директива .. automethod:: mymodule.func должна была .. automethod:: mymodule.func:

.. automethod:: mymodule::func'

Ответ 8

Sphinx не очень совместим с python3, работает __import__(module_name) И importlib.import_module(module_name) работают как в моем интерпретаторе, так и не в sphinx.

Я попробовал проверить основную ветвь sphinx, изменил мой интерпретатор на python3.4 в Makefile и получил ошибки в модулях, которые были удалены в серии 3.x. Вы можете увидеть мой отчет о проблемах здесь:

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