Linux下Kivy+PyInstaller打包体积过大问题求助
如何减小PyInstaller打包Kivy应用的体积
嘿,我完全懂你现在的困扰——几KB的代码打包出来快250MB,确实有点离谱!这其实是PyInstaller打包Kivy应用时的常见问题,因为它默认会把整个Kivy框架、Python解释器,甚至一些你根本没用到的依赖模块一股脑塞进去。作为打包新手,别慌,我给你几个实用的优化方法,一步步来压缩体积:
1. 先在干净的虚拟环境里打包
系统全局环境里可能装了一堆你这次打包用不上的库(比如之前玩数据分析装的pandas、numpy之类的),PyInstaller会误把这些也打包进去。解决方法很简单:
- 创建一个全新的虚拟环境:
python -m venv kivy-env - 激活虚拟环境:Linux下是
source kivy-env/bin/activate - 只安装必要的依赖:
pip install kivy pyinstaller - 再用这个环境打包你的代码,这样PyInstaller只会打包Kivy和PyInstaller本身的依赖,能砍掉不少冗余。
2. 给PyInstaller加优化参数
PyInstaller自带不少能减小体积的参数,试试在打包命令里加上这些:
--optimize=2:启用Python的最高优化级别,会自动去掉代码里的断言和调试信息,能小幅压缩体积。--exclude-module:手动排除你确定没用的模块,比如Kivy的测试、示例、extras模块,这些完全不需要:pyinstaller --exclude-module kivy.tests --exclude-module kivy.extras --exclude-module kivy.demos your_script.py- 如果你用
--onedir模式(生成文件夹而不是单个可执行文件),之后可以手动删掉文件夹里的冗余文件,比如Kivy的文档、示例资源、没用的.so库,再整体压缩成zip包,体积会比--onefile模式更小一点。
3. 用UPX压缩二进制文件
UPX是一个开源的可执行文件压缩工具,能把PyInstaller生成的二进制文件压缩30%-70%,效果非常明显:
- 先在Linux上安装UPX:
sudo apt install upx-ucl(Debian/Ubuntu系)或者用对应发行版的包管理器安装。 - 打包时加上
--upx参数:
注意:少数二进制文件可能不支持UPX压缩,如果打包时报错,可以用pyinstaller --upx --exclude-module kivy.tests your_script.py--upx-exclude参数跳过这些文件,比如--upx-exclude "libsomething.so"。
4. 精简Kivy的依赖项
Kivy默认依赖一些多媒体库(比如SDL、GStreamer),如果你的应用只是做简单的图形绘制(看你的代码是用Line、Color这些,应该不需要音频视频),可以手动禁用这些冗余依赖:
- 在代码最开头加上这两行,告诉Kivy不要加载不必要的后端:
import os os.environ['KIVY_GL_BACKEND'] = 'gl' os.environ['KIVY_NO_MEDIA'] = '1' - 另外,如果你用的是内联KV代码(没有外部.kv文件),确保没有不小心打包进去多余的资源文件(比如图片、音频)。
5. 自定义PyInstaller的spec文件
如果上面的方法还不够,试试生成并编辑spec文件,更精细地控制打包内容:
- 先生成spec文件:
pyi-makespec your_script.py - 打开生成的
your_script.spec文件,找到Analysis部分的excludes参数,添加更多要排除的模块,比如:a = Analysis( ['your_script.py'], pathex=[], binaries=[], datas=[], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=['kivy.tests', 'kivy.extras', 'kivy.demos', 'docutils', 'pygments'], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=None, noarchive=False, ) - 然后用这个spec文件打包:
pyinstaller your_script.spec
6. 试试Kivy官方的Buildozer工具
Buildozer是Kivy官方的打包工具,它比PyInstaller更了解Kivy的依赖结构,能更精准地打包必要的组件,有时候能得到比PyInstaller更小的包:
- 安装Buildozer:
pip install buildozer - 在项目目录下运行
buildozer init生成配置文件 - 编辑
buildozer.spec,找到[app]部分,设置source.dir为你的代码目录,requirements设为kivy - 运行
buildozer linux debug开始打包,等待完成后就能在bin目录下找到精简后的包。
按照这些步骤一步步来,你的包体积应该能降到几十MB甚至更小,亲测有效!
内容的提问来源于stack exchange,提问作者user8694101
相关产品推荐
相关产品推荐

