#python #python-sphinx #autodoc #sphinx-apidoc
Вопрос:
Sphinx, генератор документации Python, похоже, не понимает моих модулей/пакетов. Вкл make clean amp;amp; make html
., когда выполняется этот код: from statstuff import statistics as stats
, он выводит:
ImportError: Нет модуля с именем «statstuff»
Я также попытался ссылаться на модуль как from . import statistics as stats
, так как модули находятся в одном пакете, но выводит Sphinx:
Ошибка системы: Родительский модуль » не загружен, не может выполнить относительный импорт
Кроме того, config.py
кажется , что он правильно настроен как sys.path.insert(0, os.path.abspath('../statstuff/'))
, учитывая, что папка документации совместно использует свою родительскую папку с папкой statstuff.
Во всяком случае, вот хранилище с файлами: https://github.com/lucasmauro/statstuff
Проблема возникает в statstuff/regression.py
строках 2 и 3: https://github.com/lucasmauro/statstuff/blob/master/statstuff/regression.py
Код обычно выполняется с интерпретаторами Python, но Sphinx не удается найти модуль в том виде, в каком был написан код (или конфигурация).
У кого-нибудь есть подсказка, как это решить?
Действительно, большое вам спасибо!
Ответ №1:
Поскольку ваши модули находятся в пакете под названием statstuff
, я предлагаю следующее:
- Добавьте путь к каталогу выше
statstuff
, чтобыsys.path
в conf.py:sys.path.insert(0, os.path.abspath('..'))
- Отредактируйте
automodule
директивы. Изменить.. automodule:: probability
Для
.. automodule:: statstuff.probability
и так далее.
Комментарии:
1. mzjn, большое вам спасибо. Это сработало, но вроде как. Все было помещено в «statstuff» на странице документации. У вас есть какие-нибудь другие идеи?
2. «Все было внутри «statstuff» на странице документации» . Это проблема? Вы поместили свои модули в пакет, который называется
statstuff
, и это должно быть отражено в документации, не так ли?3. Я не уверен, что это то, что вы хотите, но вы могли бы попытаться установить переменную конфигурации
False
add_module_names в значение . Это приведет к удалениюstatstuff.<modname>
всех имен функций.4. Моя первоначальная идея состояла в том, что статусом пакета будет корень, такой как «src», и модули или пакеты внутри него (и тесты вне «src»). Но я очень новичок в Python, поэтому мой дизайн не очень хорош, хе-хе. Таким образом, установка sys.path.insert(0, os.path.abspath(‘..’)) работает со всеми модулями, так что все в порядке. Я думаю, мне действительно не нужно рассматривать «statstuff» как корень документации, в конце концов, это не имеет большого значения. Большое спасибо, @mzjn. 🙂