[英]Import error using KivyMD and Pyinstaller
當我嘗試將 pyinstaller 與“ KivyMD Kitchen Sink ”(--one file --debug --clean)一起使用時,我得到了這個:
File "kivymd\theming.py", line 17, in <module>
File "site-packages\kivy\core\text\__init__.py", line 248, in register
# and pass it in context.config token
OSError: File C:\Users\username\AppData\Local\Temp\_MEI92522\kivymd\fonts/Roboto-Regular.ttfs not found
Failed to execute script main
我嘗試使用:
if hasattr(sys, '_MEIPASS'):
os.chdir(sys._MEIPASS)
在 main.py 但沒有任何改變。
此外,我將 Roboto-Regular.ttf 復制到 main.exe 的目錄但沒有成功。
Pyinstaller 與其他 Kivy 應用程序配合良好。
更新:
我找到了一個暫時的解決方案。 我將 pyinstaller 的--onedir
命令與 main.py 一起使用,而不是 main.spec 文件:
wine pyinstaller --onedir main.py
然后,我將 kivymd 文件夾 (../site-packages/kivyMD) 復制到我的應用程序文件夾,應用程序啟動時沒有錯誤。
無論如何,我想將應用程序凍結為--onefile
,有什么建議嗎? 謝謝!
由於KivyMD 0.102.1有 PyInstaller 掛鈎。 您可以在 .spec 文件中指定 KivyMD 的掛鈎目錄:
from kivymd import hooks_path as kivymd_hooks_path
a = Analysis(
# ...
hookspath=[kivymd_hooks_path],
# ...
)
您可以在 KivyMD 的文檔中查看Kitchen Sink 的 pyinstaller.spec 文件和示例,了解如何使用此掛鈎。
完整的 pyinstaller.spec 文件將是:
# -*- mode: python ; coding: utf-8 -*-
import sys
import os
from kivy_deps import sdl2, glew
from kivymd import hooks_path as kivymd_hooks_path
path = os.path.abspath(".")
a = Analysis(
["main.py"],
pathex=[path],
hookspath=[kivymd_hooks_path],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=None,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=None)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
debug=False,
strip=False,
upx=True,
name="app_name",
console=False,
)
pyinstaller 中沒有 kivymd 的鈎子,它無法識別包,因此會出現導入錯誤。 所以你可以做的是為 pyinstaller 寫一個小鈎子,這樣它就可以在打包過程中被識別。
也許嘗試使用我的代碼片段。 在 Windows 10 上測試
from PyInstaller.utils.hooks import (
collect_data_files,
copy_metadata,
collect_submodules
)
datas = copy_metadata('kivymd')
hiddenimports = collect_submodules('kivymd')
datas = collect_data_files('kivymd')
參考 PyInstaller 掛鈎https://bitbucket.org/snippets/eiNjel/RgdLkG
在 pyinstaller/hooks 中創建這個文件,你應該沒問題。
pip install auto-py-to-exe
auto-py-to-exe
(在 cmd 中)auto-py-exe
ui 中選擇附加選項auto -py-exe(ui)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.