使用 pyinstaller 时没有名为 kivymd.effects 的模块
Posted
技术标签:
【中文标题】使用 pyinstaller 时没有名为 kivymd.effects 的模块【英文标题】:No module named kivymd.effects when using pyinstaller 【发布时间】: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'
【问题讨论】:
【参考方案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"fontsos.sep")
"""Path to fonts directory."""
images_path = os.path.join(path, f"imagesos.sep")
"""Path to images directory."""
...
修改:
....
path = os.path.dirname(__file__)
"""Path to KivyMD package directory."""
fonts_path = os.path.join(path, f"fontsos.sep")
"""Path to fonts directory."""
images_path = os.path.join(path, f"imagesos.sep")
"""Path to images directory."""
effects_path = os.path.join(path, f"effectsos.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 我不知道为什么,但这对我不起作用... 马可,你能帮帮我吗?我在***.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 在 virtualenv 上运行它以上是关于使用 pyinstaller 时没有名为 kivymd.effects 的模块的主要内容,如果未能解决你的问题,请参考以下文章
在使用 PyInstaller --onefile 打包 kivy 时包含 .kv/.json 文件?
使用 pyinstaller 打包后 Kivy 应用程序崩溃
SDL2 错误:使用 pyinstaller 冻结 kivy 应用程序时“无法加载图像 <default.png>”
pyinstaller kivy 错误无法获取任何图像提供程序,中止