【问题标题】:No module named kivymd.effects when using pyinstaller使用 pyinstaller 时没有名为 kivymd.effects 的模块
【发布时间】:2021-11-23 21:59:46
【问题描述】:

嗨,任何人都可以帮忙解决这个问题,当我尝试运行它时,我的 exe 文件抛出了这个错误,并且我在 main.spec 文件中将 kivymd 添加到了我的 hiddenimports=["kivymd"] 中,我也尝试安装kivymd 使用 pip 但仍然抛出错误。

    Traceback (most recent call last):
  File "kivy\lang\parser.py", line 472, in execute_directives
ModuleNotFoundError: No module named 'kivymd.effects'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "kivy\lang\parser.py", line 474, in execute_directives
ModuleNotFoundError: No module named 'kivymd.effects'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 28, in <module>
    from kivymd.uix.datatables import MDDataTable
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "kivymd\uix\datatables.py", line 307, in <module>
  File "kivy\lang\builder.py", line 373, in load_string
  File "kivy\lang\parser.py", line 402, in __init__
  File "kivy\lang\parser.py", line 508, in parse
  File "kivy\lang\parser.py", line 485, in execute_directives
kivy.lang.parser.ParserException: Parser: File "<inline>", line 3:
...
      1:
      2:#:import DEVICE_TYPE kivymd.material_resources.DEVICE_TYPE
>>    3:#:import StiffScrollEffect kivymd.effects.stiffscroll.StiffScrollEffect
      4:
      5:
...
Unable to import package 'kivymd.effects.stiffscroll.StiffScrollEffect'

【问题讨论】:

    标签: pyinstaller kivymd


    【解决方案1】:

    我为同样的问题苦苦挣扎了几天,所以这里是解决方法。

    pyinstaller 没有导入效果模块,因为它不包含在 kivymd 钩子列表(kivymd_hooks_path)中,所以您需要手动添加它:

    首先转到 ...\AppData\Local\Programs\Python\Python38\Lib\site-packages\kivymd (或任何您的 kivymd 路径并修改 __init__.py 以添加效果路径:

    原文:

    ....

    path = os.path.dirname(__file__)
    """Path to KivyMD package directory."""
    
    fonts_path = os.path.join(path, f"fonts{os.sep}")
    """Path to fonts directory."""
    
    images_path = os.path.join(path, f"images{os.sep}")
    """Path to images directory."""
    

    ...

    修改:

    ....
    
        path = os.path.dirname(__file__)
        """Path to KivyMD package directory."""
        
        fonts_path = os.path.join(path, f"fonts{os.sep}")
        """Path to fonts directory."""
        
        images_path = os.path.join(path, f"images{os.sep}")
        """Path to images directory."""
        
        effects_path = os.path.join(path, f"effects{os.sep}")
        """Path to effects directory."""
    
    ...
    

    第二次转到 ...\kivymd\tools\packaging\pyinstaller 并修改 hook-kivymd.py 并添加效果路径:

    datas = [
        (
            kivymd.fonts_path,
            str(Path("kivymd").joinpath(Path(kivymd.fonts_path).name)),
        ),
        (
            kivymd.images_path,
            str(Path("kivymd").joinpath(Path(kivymd.images_path).name)),
        ),
        (
            kivymd.effects_path,
            str(Path("kivymd").joinpath(Path(kivymd.effects_path).name)),
        ),
    ]
    

    一旦完成,创建一个新的可分发,就是这样:D

    【讨论】:

    • 好的,谢谢@Marco FC,我会尝试并更新您的任何内容
    • 效果很好,谢谢@Marco FC
    • 我不知道为什么,但这对我不起作用...
    • 马可,你能帮帮我吗?我在stackoverflow.com/questions/70742358/… 发布了我的踪迹
    【解决方案2】:

    以下代码适用于我:

    python3.9
    Python 3.9.5 (default, May 19 2021, 11:32:47) 
    [GCC 9.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from kivymd.effects.stiffscroll import StiffScrollEffect
    [INFO   ] [Logger      ] Record log in /home/username/.kivy/logs/kivy_21-10-02_3.txt
    [INFO   ] [Kivy        ] v2.0.0
    [INFO   ] [Kivy        ] Installed at "/usr/local/lib/python3.9/dist-packages/kivy/__init__.py"
    [INFO   ] [Python      ] v3.9.5 (default, May 19 2021, 11:32:47) 
    [GCC 9.3.0]
    [INFO   ] [Python      ] Interpreter at "/usr/bin/python3.9"
    [INFO   ] [KivyMD      ] 0.104.2, git-bc7d1f5, 2021-06-06 (installed at "/usr/local/lib/python3.9/dist-packages/kivymd/__init__.py")
    [INFO   ] [Factory     ] 186 symbols loaded
    [INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored)
    [INFO   ] [Text        ] Provider: sdl2
    print(StiffScrollEffect)
    <class 'kivymd.effects.stiffscroll.StiffScrollEffect'>
    

    【讨论】:

    • 我不明白你@Dmitry 请解释一下
    • 我也得到了和你一样的输出,但我似乎不知道如何解决这个错误
    • 请尝试运行相同的命令。如果它有效,那么问题不在于 kivy 安装,您必须提供有关您正在做什么的更多详细信息。如果不是问题出在您的环境中
    • 以下链接可能会有所帮助:askubuntu.com/questions/382301/…
    • 我正在使用 git cmd 而不是 ubuntu 或 linux 在 vi​​rtualenv 上运行它
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2019-06-17
    • 2018-07-01
    • 2016-09-03
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多