Sphinx autodoc не может импортировать модуль

Я пытаюсь задокументировать проект с помощью 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? В каждом каталоге необходимо сделать модуль Python доступным для импорта.

Steve Piercy 21.02.2019 22:26

Да, у меня есть файл __init__.py в каталоге Scripts.

Alex Cavanaugh 21.02.2019 22:31

как выглядит команда Сфинкс autodoc?

user9903 22.02.2019 04:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
3
6 643
2

Ответы 2

Вы захотите проверить путь загрузки модуля в соответствии с Документы Сфинкса:

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 содержит только комментарии.

Alex Cavanaugh 21.02.2019 23:32

Также добавьте любые строки в свой conf.py, которые определяют sys.path.

Steve Piercy 22.02.2019 09:12

У меня есть две строки для этого: sys.path.insert(0, os.path.abspath('.'))sys.path.append('Main')

Alex Cavanaugh 22.02.2019 16:12

@AlexCavanaugh - код с открытым исходным кодом? трудно понять, что происходит с путем без остального источника

user9903 22.02.2019 18:49

К сожалению, это не с открытым исходным кодом. Но я думаю, что смогу сделать что-то вроде sys.path.append(os.path.abspath('./Main/Scripts')), поскольку Sphinx запускается из каталога Project. Это звучит правильно?

Alex Cavanaugh 22.02.2019 21:41

Поскольку ваш autodoc подбирает некоторые модули, это может быть связано с тем, что зависимости неисправных модулей либо 1) неправильно импортированы, либо 2) не установлены в вашей среде Python. Вы захотите проверить, работают ли все операторы импорта в ваших отказавших модулях.

Другие вопросы по теме