Sphinx autosummary/autodoc выдает ошибку для некоторых модулей, но не для всех.
Мой код с открытым исходным кодом: https://github.com/dream-faster/krisi
WARNING: autodoc: failed to import module 'metric'; the following exception was raised:
No module named 'metric'
WARNING: autodoc: failed to import module 'report'; the following exception was raised:
No module named 'report'
Он импортирует некоторые модули (например: compare.py
), но не может импортировать другие (независимо от того, в каком подкаталоге они находятся).
Структура каталога:
library_name
│
└───src
│ │
│ └───library_name
│ └─ __init__.py
│ │
│ └───module_1.py
│ │ └─ __init__.py
│ │ └─ compare.py
│ │ └─ report.py
│ │
│ └───module_2.py
│ └─ __init__.py
│ └─ evaluate.py
│ └─ metric.py
│
└───docs
└───source
└─ conf.py
1. Указание пути (правда находит модуль частично)
Я пробовал все варианты добавления path
к sys.path
:
current_dir = os.path.dirname(__file__)
target_dir = os.path.abspath(os.path.join(current_dir, "../../src/project_name"))
sys.path.insert(0, target_dir)
sys.path.insert(0, os.path.abspath("../.."))
sys.path.insert(0, os.path.abspath("../../src"))
sys.path.insert(0, os.path.abspath("../../src/project_name"))
for x in os.walk("../../src"):
sys.path.append(x[0])
2. Проверяем, все ли зависимости установлены.
Я сделал новую чистую conda
среду и установил свой пакет с pip install -e .
Пройдены все тесты, охватывающие все модули.
3. Проверка, не является ли причиной кросс-модульный импорт
Некоторые модули ссылаются на другие модули, например: module_1.metric
ссылки module_2.type
Однако корректно импортированные модули делают то же самое без ошибок.
Что я упускаю из виду?
Я заметил несоответствие в вашей структуре каталогов (library_name
) и вашем sys.path (project_name
). Однако похоже, что вы нашли и исправили проблему на github.com/dream-faster/krisi/commit/…
Спасибо обоим за просмотр! - Я получаю ошибки импорта как локально, запустив make html
в папке docs, так и в рабочем процессе github - я использую альтернативу conda (мамба), которая почти идентична. Я устанавливаю библиотеку с помощью pip install -e .
Да, я по ошибке написал не тот код, но исправил
Я обнаружил две проблемы, я не уверен, что вызвало проблему. Вероятно, это была комбинация того и другого, и, несмотря на то, что я пытался быть строгим, я не правильно понял комбинацию. Я методично удалял все файлы и добавлял их обратно один за другим.
sys.path.insert(0, os.path.abspath("../../src/project_name"))
Я надеюсь, что это поможет кому-то другому.
Правильным решением будет использование виртуальных сред Python, в которых и ваш проект, и Sphinx установлены в одной и той же виртуальной среде. Обычному разработчику Python не должно быть необходимости тыкать sys.path
.
И мой проект, и Sphinx установлены в одной среде Python. Однако conf.py
находится на два подкаталога ниже, поэтому не может найти каталог проекта.
В каком контексте вы получаете ошибки импорта? Когда вы строите документ? С помощью какой команды (в каком каталоге)? Это может быть проблема с PATH. Кроме того, вы используете Conda исключительно для управления своей средой?