kivy打包
大约 2 分钟
kivy打包
安装pyinstaller
pyinstaller是python打包exe文件的通用程序
pip install --upgrade pyinstaller生成spec文件
下载安装好pyinstaller程序之后,我们就需要通过如下命令来生成spec文件
PyInstaller --name {待生成的exe文件名} {路径以及文件名}例如我的项目kivyAPP,而需要打包的文件在kivyApp\demo\kivyApp.py,那么我使用如下命令生成spec文件
pyinstaller demo\kivyApp.py然后会在kivyAPP根目录生成一个kivyApp.spec文件,文件内容如下
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['demo\\kivyApp.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='kivyApp',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='kivyApp',
)修改spec文件
spec文件可以直接通过文本编辑器打开,打开后很像一个配置文件。我们需要在里面的两个地方添加内容。 首先,在第一行添加from kivy_deps import sdl2, glew。直接复制到第一行即可,无需修改。修改结果如下图所示。
# -*- mode: python ; coding: utf-8 -*-
from kivy_deps import sdl2, glew
a = Analysis(
['demo\\kivyApp.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='kivyApp',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='kivyApp',
)其次,找到coll变量,修改其赋值。coll在文件的最下面,大家可以通过文档搜索找到。
然后,用搜索,找到 COLLECT() 这个位置,添加上 demo 用到的其他文件(touchtracer.kv, particle.png,等等):修改示例中的行位置,添加一个 Tree() 对象,例如这里的是 Tree('demo\\')。这个 Tree() 会搜索在当前这个 demo 文件夹的所有文件,并添加到你最终打包的程序中。
要添加额外的依赖包,就要在 COLLECT 的第一个关键词参数的前面,为每一个依赖包的路径添加一个 Tree 对象。例如下面的就是以 *[Tree(p) for p in(sdl2.dep_bins + glew.dep_bins)] 为例:
# -*- mode: python ; coding: utf-8 -*-
from kivy_deps import sdl2, glew
a = Analysis(
['demo\\kivyApp.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='kivyApp',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
Tree('demo\\'),
a.binaries,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
strip=False,
upx=True,
upx_exclude=[],
name='kivyApp',
)打包exe
执行打包指令
pyinstaller kivyApp.spec然后在kivyApp\dist目录就生成一个kivyApp.exe程序了
注意:当打包exe不成功的时候就重新安装一下pyinstaller 命令
