Ошибка «Попытка относительного импорта» в Sphinx-doc - PullRequest
0 голосов
/ 18 мая 2018

Я пытался использовать автодокументацию Sphinx-doc.Я хочу исправить следующую проблему.На данный момент решения StackOverflow не работают.Это связано со структурой моего проекта или с тем, как я выбрал импорт своих модулей?

При заданной структуре файлов:

project
 |_ src
 |   |_ pre_processing
 |   |     |_ fileInfo.py
 |   |
 |   |_ utils
 |         |_ folder.py
 |_ test
 |      
 |_ doc
 |   |_ doc_user
 |        |_ build
 |        |_ source
 |             |_config.py

Следующий конфиг sys.path:

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

У меня есть несколько относительных импортов в fileInfo.py как:

from ..utils.folder import get_files_directory

Ошибка терминала

WARNING: autodoc: failed to import module 'pre_processing.fileInfo'; the following exception was raised:
Traceback (most recent call last):

File "/home/florian-stage/miniconda/envs/gd/lib/python3.5/site-packages/sphinx/ext/autodoc/importer.py", line 140, in import_module
__import__(modname)

File "/home/florian-stage/Projet-2018/pg_georef_data-master/arbo propre/src/pre_processing/fileInfo.py", line 12, in <module>
from ..utils.folder import get_files_directory
ValueError: attempted relative import beyond top-level package

1 Ответ

0 голосов
/ 18 мая 2018

Кажется, ваша проблема связана со структурой вашего проекта.Как подсказал CristiFati , в каждой из ваших папок должно быть __init__.py файлов, включая project. Документы на пакеты считают это необходимым:

Файлы init .py необходимы для того, чтобы Python рассматривал каталоги как содержащие пакеты;это сделано для предотвращения непреднамеренного скрытия каталогов с общим именем, например строки, действительными модулями, которые появляются позже в пути поиска модулей.

Для тестирования вашего кода вам нужно будет запустить из некоторыхФайл main.py, поскольку импорт будет относиться к папке верхнего уровня (в данном случае project).Вот как должна выглядеть структура файла:

project
 |  __init__.py
 |  main.py
 |_ src
 |   |  __init__.py
 |   |_ pre_processing
 |   |     |  __init__.py
 |   |     |  fileInfo.py
 |   |
 |   |_ utils
 |         |  __init__.py
 |         |  folder.py
 |_ test
 |   |  __init__.py
 |      
 |_ doc
 |   |  __init__.py
 |   |_ doc_user
 |        |  __init__.py
 |        |_ build
 |             |  __init__.py
 |        |_ source
 |             |  __init__.py
 |             |  config.py

Тогда в main.py вы должны иметь:

from src.pre_processing import fileInfo

Запуск main.py теперь должен производить безошибочный вывод.

...