#python #kivy #python-sphinx #kivymd
Вопрос:
Я создаю приложение с помощью KivyMD на python, теперь я хочу сделать быструю документацию с помощью Sphinx. Но каждый раз, когда я использую «сделать html» в командной строке, я получаю следующую ошибку:
WARNING: autodoc: failed to import module 'test'; the following exception was raised:
Traceback (most recent call last):
File "c:usersiuryckanaconda3libsite-packagessphinxextautodocimporter.py", line 70, in import_module
return importlib.import_module(modname)
File "c:usersiuryckanaconda3libimportlib__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:UsersiuryckOneDriveDocumentsVSCodetesttest.py", line 1, in <module>
from kivymd.app import MDApp
File "c:usersiuryckanaconda3libsite-packageskivymdapp.py", line 62, in <module>
class MDApp(App, FpsMonitoring):
File "c:usersiuryckanaconda3libsite-packageskivymdapp.py", line 63, in MDApp
theme_cls = ObjectProperty(ThemeManager())
File "c:usersiuryckanaconda3libsite-packageskivymdtheming.py", line 860, in __init__
self.rec_shadow = Atlas(f"{images_path}rec_shadow.atlas")
File "c:usersiuryckanaconda3libsite-packageskivyatlas.py", line 188, in __init__
self._load()
File "c:usersiuryckanaconda3libsite-packageskivyatlas.py", line 216, in _load
ci = CoreImage(subfilename)
File "c:usersiuryckanaconda3libsite-packageskivycoreimage__init__.py", line 561, in __init__
self.filename = arg
File "c:usersiuryckanaconda3libsite-packageskivycoreimage__init__.py", line 754, in _set_filename
image = ImageLoader.load(
File "c:usersiuryckanaconda3libsite-packageskivycoreimage__init__.py", line 463, in load
raise Exception('Unknown <%s> type, no loader found.' % ext)
Exception: Unknown <png> type, no loader found.
Как вы можете видеть, Sphinx может найти модуль Kivy, а также найти код. Так что это не проблема с каталогом или окружающей средой, как я часто видел.
Его можно просто воспроизвести, установив KivyMD и Sphinx и используя следующий код:
from kivymd.app import MDApp
if __name__ == "__main__":
print('Hello World')
Затем выполните обычный процесс документирования sphinx на нем.
Есть какие-нибудь идеи?
Комментарии:
1. Я не могу повторить. Я запустил ваш код после того, как убедился, что Sphinx и KivyMD были установлены, запустил
sphinx-quickstart
все настройки по умолчанию, затем запустилmake html
, и все сработало нормально. Это на Win10 с Cygwin.2. @MattDMo Вы установили какие-либо зависимости или просто установили оба pip? Я тоже на выигрыше 10. Может быть, это проблема с анакондой? Я запустил терминал из терминала anaconda, убедился, что он находится в той же среде и все такое.
3. У меня уже были установлены Sphinx и Kivy с зависимостями, мне просто нужно было установить KivyMD, и все его зависимости уже были там. Я не использую Анаконду, поэтому не знаю, имеет ли это какое-либо отношение к этому. Я бы удалил оба и попытался снова с нуля, заставляя обновлять зависимости.
4. Кроме того, просто еще раз взглянув на вашу ошибку, я бы рекомендовал переименовать ваш файл из
test.py
вkivymd_test.py
или что-то в этом роде. Похоже, что-то пытается импортироватьtest
модуль, а вместо этого импортирует ваш файл.5. @MattDMo Я думаю, что вы забыли sphinx-apidoc-o [OUTPUT_DIR] [INPUT_DIR], иначе он не читает ваш код. Я сделал, как вы сказали, и также не получил ошибок, но код не был задокументирован
Ответ №1:
Хорошо, я нашел 2 решения, ошибка, насколько я знаю, исходит от kivymd v0.104.1, так что вы можете:
1 — Обновите KivyMD до версии 0.104.2
Но, если вы много работали в таком проекте, как я, у вас будет небольшой сердечный приступ, когда вы заметите, что многие визуальные эффекты изменились с одной версии на другую, многое выглядит по-другому, и вы, вероятно, этого не хотите, поэтому мое решение проблемы было…
2 — Измените код MDApp в /kivymd/app.py
В версии 0.104.1 класс MDApp должен выглядеть следующим образом
class MDApp(App, FpsMonitoring):
theme_cls = ObjectProperty(ThemeManager())
Удалите строку ThemeManager, затем добавьте в класс следующее
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.theme_cls = ThemeManager()
Так что все это должно выглядеть так:
class MDApp(App, FpsMonitoring):
theme_cls = ObjectProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.theme_cls = ThemeManager()
В случае, если вы задаетесь вопросом, безопасно ли это и не приведет ли к ошибкам в будущем, /kivymd/app.py в версии 0.104.2 выглядит именно так (отсюда и возникла идея сделать это). Я запустил свое приложение, открыл кучу страниц, а что нет, проблем не возникло, и визуальные эффекты остались прежними.