Сбой 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