1

当我尝试将 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吗?谢谢!

4

3 回答 3

1

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 中创建这个文件,你应该没问题。

于 2017-10-06T00:51:46.883 回答
1

由于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,
)
于 2019-12-06T13:01:08.113 回答
0
  • 利用pip install auto-py-to-exe
  • 运行auto-py-to-exe(在 cmd 中)
  • auto-py-exe在ui中选择其他选项
  • 在附加文件中,添加从站点包复制的 kivymd 文件夹(auto -py-exe(ui)
于 2020-09-23T15:24:12.510 回答