Я пытаюсь задокументировать проект с помощью Sphinx и столкнулся с проблемой, когда из папки импортируются только некоторые модули. Структура моего проекта выглядит так:
Project
|
|--Main
| |--Scripts
| __init__.py
| libsmop.py
| conv_table.py
| f_discrim.py
| recipes.py
| ...
Когда я пытаюсь запустить make html, libsmop и recipes импортируются без проблем, однако conv_table и f_discrim получают следующую ошибку:
WARNING: autodoc: failed to import module u'conv_table' from module u'Scripts'; the following exception was raised:No module named conv_table
Я не думаю, что это мой файл конфигурации, потому что он находит все файлы, когда я запускаю sphinx-apidoc -o _rst Main/Scripts, и я подтвердил, что они появляются в результирующем Scripts.rst файле.
Почему Autodoc находит одни модули, но не находит другие?
Редактировать:
conv_table.py имеет такую форму:
import re
import numpy as np
"""
conv_table dictionary at the bottom of this file maps from matlab functions
to their python equivalents.
"""
def get_args(line,separator = ",", open_char='(', close_char=')'):
"""Returns the arguments of line
>>> get_args('ones(3,1,length(arr))')
...
< a bunch of function definitions>
...
conv_table = {... < a very big dictionary > ...}
Да, у меня есть файл __init__.py в каталоге Scripts.
как выглядит команда Сфинкс autodoc?






Вы захотите проверить путь загрузки модуля в соответствии с Документы Сфинкса:
For Sphinx (actually, the Python interpreter that executes Sphinx) to find your module, it must be importable. That means that the module or the package must be in one of the directories on sys.path – adapt your sys.path in the configuration file accordingly.
Также было бы полезно узнать, как выглядит ваш __init__.py в каталоге Scripts и как выглядит модуль conv_table.
Я думаю, что путь загрузки модуля правильный, потому что он подхватывает некоторые модули в папке. Сейчас я добавлю редактирование, которое показывает мой conv_table, но мой __init__.py содержит только комментарии.
Также добавьте любые строки в свой conf.py, которые определяют sys.path.
У меня есть две строки для этого: sys.path.insert(0, os.path.abspath('.'))sys.path.append('Main')
@AlexCavanaugh - код с открытым исходным кодом? трудно понять, что происходит с путем без остального источника
К сожалению, это не с открытым исходным кодом. Но я думаю, что смогу сделать что-то вроде sys.path.append(os.path.abspath('./Main/Scripts')), поскольку Sphinx запускается из каталога Project. Это звучит правильно?
Поскольку ваш autodoc подбирает некоторые модули, это может быть связано с тем, что зависимости неисправных модулей либо 1) неправильно импортированы, либо 2) не установлены в вашей среде Python. Вы захотите проверить, работают ли все операторы импорта в ваших отказавших модулях.
Получил
__init__.py? В каждом каталоге необходимо сделать модуль Python доступным для импорта.