Anaconda环境下无法用PyInstaller打包Kivy项目成.exe文件
解决Kivy+Anaconda环境下PyInstaller打包失败/运行报错问题
我之前帮不少开发者解决过Kivy+PyInstaller+Anaconda的打包问题,你的情况其实挺典型的——Anaconda环境的依赖冗余加上Kivy本身的打包特殊性,很容易踩坑。咱们一步步来解决:
第一步:创建干净的虚拟环境,避免Anaconda依赖冲突
Anaconda默认环境里装了太多无关包,很容易和Kivy、PyInstaller的依赖冲突。建议你创建一个仅包含必要依赖的conda虚拟环境:
- 创建新环境(选Kivy官方支持的Python版本,比如3.9,太新的版本可能兼容性差):
conda create -n kivy-pack-env python=3.9 - 激活环境:
conda activate kivy-pack-env - 用pip安装Kivy和PyInstaller(别用conda装Kivy,conda包经常有打包相关的bug):
pip install kivy pyinstaller
第二步:配置正确的PyInstaller打包参数(针对Kivy)
Kivy需要PyInstaller加载特定的hook文件和依赖库,直接用默认命令打包肯定会出问题:
- 先确保你的主脚本有标准的Kivy入口(比如
main.py):from kivy.app import App from kivy.uix.label import Label class MyKivyApp(App): def build(self): return Label(text="Hello from Kivy!") if __name__ == "__main__": MyKivyApp().run() - 基础打包命令(适合简单项目):
pyinstaller --windowed --onefile --name MyApp main.py--windowed:隐藏控制台窗口(GUI程序必加)--onefile:生成单个exe文件
- 如果你的项目有kv文件、图片等资源,需要用
--add-data参数指定打包路径(Windows用分号分隔,Linux/macOS用冒号):pyinstaller --windowed --onefile --add-data "myapp.kv;." --add-data "assets/logo.png;assets" main.py - 若仍报错,手动修改spec文件:
- 先生成spec文件:
pyinstaller main.py - 打开生成的
main.spec,在Analysis部分添加Kivy的必要隐藏依赖:a = Analysis( ['main.py'], pathex=[], binaries=[], datas=[], hiddenimports=['kivy.deps.glew', 'kivy.deps.sdl2', 'kivy.deps.gstreamer'], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) - 再用spec文件打包:
pyinstaller main.spec
- 先生成spec文件:
第三步:解决“无可用窗口”运行报错
这个错误本质是Kivy找不到窗口渲染依赖(SDL2、GLEW),常见解决办法:
- 确保你用pip安装的Kivy(conda版Kivy的SDL2依赖经常缺失)
- 手动复制Kivy依赖的dll文件到exe目录:
找到你的虚拟环境下的Lib\site-packages\kivy\deps\sdl2和glew文件夹,把里面的SDL2.dll、glew32.dll等dll文件复制到exe所在的dist文件夹里 - 运行exe时,不要把exe单独移到其他目录,要保留
dist文件夹里的所有文件(如果用--onefile则不需要,但偶尔还是会有依赖缺失)
第四步:排查打包失败的问题(连打包命令都无法执行)
如果现在连PyInstaller都无法启动打包,先做这些排查:
- 检查PyInstaller版本:建议用稳定版,比如
pip install pyinstaller==5.13.2(最新版可能和Kivy有兼容性问题) - 检查依赖冲突:运行
pip check看有没有报错的依赖,修复后再尝试打包 - 直接在命令行执行打包命令(别用PyCharm的终端,避免环境变量问题),看具体的错误提示——比如是不是某个模块无法被PyInstaller识别,或者权限不足
按照这个流程走,大部分Kivy+Anaconda的打包问题都能解决。如果还有具体的报错信息,可以再针对性分析。
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

