如何将使用Kivy与Tensorflow的Python脚本打包为.exe文件?
解决Kivy + TensorFlow Python脚本打包为.exe的完整方案
我之前也踩过Kivy+TensorFlow打包的各种坑,折腾了PyInstaller和cx_Freeze才找到靠谱的配置方法,下面这套流程亲测能顺利打包你提到的图像识别Kivy应用:
一、优先推荐:PyInstaller 正确配置方案
PyInstaller其实是打包这类应用最稳定的工具之一,你之前遇到的pywrap_tensorflow导入错误,本质是PyInstaller没自动收集全TensorFlow的深层依赖,不是单纯加路径就能解决的。按以下步骤操作:
生成PyInstaller配置文件
先别直接打包,先生成可编辑的spec文件:pyi-makespec --onefile main.py这会在当前目录生成
main.spec,我们要修改这个文件补全依赖配置。修改spec文件的核心配置
打开main.spec,找到Analysis部分,替换成以下内容:a = Analysis( ['main.py'], pathex=['venv\\Lib\\site-packages', 'venv\\Lib\\site-packages\\tensorflow_core'], binaries=[], datas=[ ('venv\\Lib\\site-packages\\kivy\\data', 'kivy\\data'), ('venv\\Lib\\site-packages\\kivy\\fonts', 'kivy\\fonts'), ('venv\\Lib\\site-packages\\kivy\\images', 'kivy\\images') ], hiddenimports=['tensorflow_core', 'tensorflow_core.python', 'tensorflow_core._api.v2', 'kivy.weakmethod', 'kivy.uix.behaviors'], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=['tensorflow.python.tests', 'tensorflow.tools', 'tensorflow.examples'], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=None, noarchive=False, )重点说明:
hiddenimports:手动补上PyInstaller自动漏掉的模块,包括TensorFlow的核心子模块和Kivy的weakmethod(就是你用cx_Freeze时遇到的缺失模块)pathex:明确指向虚拟环境的依赖目录,确保TensorFlow的所有底层文件都能被扫描到datas:打包Kivy的资源文件(字体、图片、数据),否则运行exe时会报资源缺失excludes:排除TensorFlow的测试、工具、示例模块,既减少打包体积,又避免不必要的依赖冲突
用修改后的spec文件打包
执行命令:pyinstaller main.spec打包完成后,
dist文件夹里的main.exe就是可以直接运行的程序。
二、cx_Freeze 修正方案(备选)
如果你更习惯用cx_Freeze,只需要修改setup.py来补全Kivy和TensorFlow的依赖:
修正后的setup.py代码
import sys from cx_Freeze import setup, Executable # 手动指定需要包含的模块,补上Kivy和TensorFlow的缺失依赖 includes = ['kivy.weakmethod', 'kivy.uix.behaviors', 'tensorflow_core', 'tensorflow_core.python'] # 排除TensorFlow的冗余模块,缩小包体积 excludes = ['tensorflow.python.tests', 'tensorflow.tools'] # 添加Kivy的资源文件,否则运行时会找不到字体、图片 include_files = [ ('venv\\Lib\\site-packages\\kivy\\data', 'kivy\\data'), ('venv\\Lib\\site-packages\\kivy\\fonts', 'kivy\\fonts'), ('venv\\Lib\\site-packages\\kivy\\images', 'kivy\\images') ] # Windows下指定GUI模式,避免运行exe时弹出控制台窗口 base = None if sys.platform == 'win32': base = 'Win32GUI' executables = [Executable("main.py", base=base)] setup( name="main", version="0.1", description="TensorFlow Image Recognition Kivy App", includes=includes, excludes=excludes, include_files=include_files, executables=executables )执行打包命令
python setup.py build打包完成后,
build目录下的子文件夹里会有可执行文件和对应的依赖库。
三、通用避坑指南
- 用干净的虚拟环境:一定要在独立的虚拟环境中安装Kivy和TensorFlow,避免全局环境的依赖版本冲突,导致打包失败
- 版本匹配很重要:建议使用Kivy 2.x和TensorFlow 2.x的稳定版本,比如Kivy 2.1.0 + TensorFlow 2.10.0,太新的版本可能存在打包工具兼容问题
- 先跑通脚本再打包:打包前务必确保
main.py在虚拟环境中能正常运行,排除代码本身的错误,再进行打包操作
内容的提问来源于stack exchange,提问作者Sasandra30
相关产品推荐
相关产品推荐

