- Kivy: compiling to a single executable
- kivy error: OSError: File data/fonts/Roboto-Regular.ttf
- OSError: File …..\kivymd\fonts/Roboto-Regular.ttf not found
- 安装venv虚拟环境:
python -m venv env
- 切换venv虚拟环境:
cd env/Scripts/&&activate.bat
- 安装kivy和pyinstaller:
python -m install kivy kivymd pyinstaller
- 编写main.spec
如果pyinstaller不能自动打包依赖库,需手动把库文件夹拉到项目目录下,文件夹名称加到hiddenimports里面
# -*- mode: python ; coding: utf-8 -*-
import os
import sys
from kivy_deps import sdl2, glew
from kivymd import hooks_path as kivymd_hooks_path
block_cipher = None
path = os.path.abspath(".")
a = Analysis(["main.py"],
pathex=[path],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[kivymd_hooks_path],
runtime_hooks=[],
excludes=['_tkinter', 'Tkinter', 'enchant', 'twisted'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
a.datas += [('main.kv', f'{path}\main.kv', '')]
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz, Tree(f'{path}/data', 'data'),
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
name='myapp',
debug=False,
strip=False,
upx=True,
console=False)
- 检查目录结构:
gui
├─env
├─data
│ └─droid.ttf
├─main.py
├─main.kv
└─main.spec
- 打包成exe
python -m PyInstaller main.spec
enjoy~