使用 Sphinx 和 KivyMD 创建文档时出错

Error creating Docs with Sphinx and KivyMD

我正在使用 python 使用 KivyMD 制作一个应用程序,现在我想使用 Sphinx 制作一个快速文档。但是每次我在命令行上使用“make html”时,我都会收到以下错误:

    WARNING: autodoc: failed to import module 'test'; the following exception was raised:
Traceback (most recent call last):
  File "c:\users\iuryck\anaconda3\lib\site-packages\sphinx\ext\autodoc\importer.py", line 70, in import_module
    return importlib.import_module(modname)
  File "c:\users\iuryck\anaconda3\lib\importlib\__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:\Users\iuryck\OneDrive\Documents\VSCode\test\test.py", line 1, in <module>
    from kivymd.app import MDApp
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivymd\app.py", line 62, in <module>
    class MDApp(App, FpsMonitoring):
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivymd\app.py", line 63, in MDApp
    theme_cls = ObjectProperty(ThemeManager())
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivymd\theming.py", line 860, in __init__
    self.rec_shadow = Atlas(f"{images_path}rec_shadow.atlas")
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivy\atlas.py", line 188, in __init__
    self._load()
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivy\atlas.py", line 216, in _load
    ci = CoreImage(subfilename)
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivy\core\image\__init__.py", line 561, in __init__
    self.filename = arg
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivy\core\image\__init__.py", line 754, in _set_filename
    image = ImageLoader.load(
  File "c:\users\iuryck\anaconda3\lib\site-packages\kivy\core\image\__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 文档处理。

有什么想法吗?

好的,我找到了 2 个解决方案,据我所知错误来自 kivymd v0.104.1,所以你可以:

1- 更新 KivyMD 至 v0.104.2

但是,如果你像我一样一直在一个项目中工作,当你注意到很多视觉效果从一个版本到另一个版本时,你会感到轻微的心脏病发作,很多东西看起来都不一样,你可能不想那样,所以,我解决问题的方法是...

2-修改MDApp代码在/kivymd/app.py

在 v0.104.1 中,MDApp class 应该如下所示

class MDApp(App, FpsMonitoring):
    theme_cls = ObjectProperty(ThemeManager())

删除 ThemeManager 行,然后在 class

中添加以下内容
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()

如果您想知道这是否安全并且不会导致未来的错误,版本 0.104.2 中的 /kivymd/app.py 看起来完全像这样(因此我得到了这样做的想法)。我 运行 我的应用程序,打开了一堆页面,什么都没有,没有问题,视觉效果仍然一样。