🎹 Python钢琴节奏大师 · 第11章
系列:Python钢琴节奏大师:从零到游戏开发实战[1]章节:第11章 / 共12章标题:项目发布篇-PyInstaller打包与exe生成指南上一章:第10章-视觉美化篇[2]下一章:第12章-毕业总结篇[3]
打包与分享——生成exe文件
今日目标:学习使用PyInstaller打包Python程序,生成独立的exe文件,添加图标和资源,让游戏可以在没有Python环境的电脑上运行。
💡 本章核心:把Python程序变成exe,分享给朋友玩
🎹 效果预览
完成本篇学习后,你将得到一个:
📁 钢琴节奏大师/├── 🎹 钢琴节奏大师.exe ← 双击就能玩!├── 📁 sounds/ ← 音效文件夹│ ├── c4.wav│ ├── d4.wav│ └── ...└── 📄 README.txt ← 使用说明
把 钢琴节奏大师.exe 发给朋友,他们不用装Python也能玩!
🤔 为什么要打包?
Python程序的痛点
打包的好处
📝 第一步:安装PyInstaller
什么是PyInstaller?
PyInstaller是一个工具,可以把Python程序打包成独立的可执行文件(exe)。
安装命令
pip install pyinstaller
或使用国内镜像:
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
验证安装
pyinstaller --version
显示版本号(如 5.13.0)表示安装成功。
📝 第二步:准备项目文件
项目结构
my_piano_game/├── piano_game.py # 主程序├── sounds/ # 音效文件夹│ ├── c4.wav│ ├── d4.wav│ ├── ...│ └── as4.wav└── icon.ico # 图标(可选)
修改代码:使用相对路径
打包后,程序运行时的路径会变化。需要修改代码,使用相对路径:
import osimport sys# 获取程序运行目录defget_resource_path(relative_path):"""获取资源文件的绝对路径"""ifhasattr(sys, '_MEIPASS'):# PyInstaller打包后的临时目录return os.path.join(sys._MEIPASS, relative_path)# 开发时的目录return os.path.join(os.path.abspath("."), relative_path)# 使用示例sound_path = get_resource_path("sounds/c4.wav")white_sounds = [pygame.mixer.Sound(get_resource_path(f"sounds/{f}")) for f in WHITE_SOUNDS]
为什么要这样写?
PyInstaller打包后,会把资源文件解压到一个临时目录(_MEIPASS)。这段代码会自动判断:
📝 第三步:打包命令
基础打包
打开命令提示符,进入项目目录:
cd my_piano_gamepyinstaller piano_game.py
等待打包完成,会生成:
常用参数
| | |
|---|
-F | | pyinstaller -F piano_game.py |
-w | | pyinstaller -w piano_game.py |
-i | | pyinstaller -i icon.ico piano_game.py |
--add-data | | |
-n | | pyinstaller -n 钢琴大师 piano_game.py |
完整打包命令
pyinstaller -F -w -i icon.ico --add-data "sounds;sounds" -n "钢琴节奏大师" piano_game.py
Windows系统用分号 ;,Mac/Linux用冒号 :
参数详解
pyinstaller \ -F \ # 打包成单个exe文件 -w \ # 不显示黑窗口(console) -i icon.ico \ # 使用icon.ico作为图标 --add-data "sounds;sounds" \ # 把sounds文件夹打包进去 -n "钢琴节奏大师" \ # exe文件叫"钢琴节奏大师.exe" piano_game.py # 主程序文件
📝 第四步:处理资源文件
方法一:使用--add-data(推荐)
pyinstaller -F -w --add-data "sounds;sounds" piano_game.py
这会:
方法二:手动复制
打包后手动把 sounds 文件夹复制到 dist/ 目录:
dist/├── 钢琴节奏大师.exe└── sounds/ ← 手动复制 ├── c4.wav └── ...
方法三:使用spec文件(高级)
编辑生成的 .spec 文件,添加资源:
a = Analysis( ['piano_game.py'], pathex=[], binaries=[], datas=[('sounds', 'sounds')], # 添加这行 ...)
然后运行:
pyinstaller piano_game.spec
📝 第五步:添加图标
准备图标文件
图标需要是 .ico 格式(Windows)。
获取图标的方法:
推荐尺寸:256x256 像素
使用图标
pyinstaller -i icon.ico piano_game.py
📝 第六步:测试和分发
测试exe文件
常见问题
压缩exe文件(可选)
安装UPX可以减小exe体积:
# 下载UPX,解压到系统路径# PyInstaller会自动检测并使用
分发游戏
把以下文件打包成zip,发给朋友:
钢琴节奏大师.zip├── 钢琴节奏大师.exe├── sounds/ ← 如果用--add-data打包了,这步可省略│ └── ...└── 使用说明.txt
使用说明.txt 示例:
🎹 钢琴节奏大师 🎹操作说明:- A S D F G H J:白键(do re mi fa sol la si)- W E T Y U:黑键(#do #re #fa #sol #la)- 空格键:开始游戏- 数字键1-4:切换主题玩法:音符从上方落下,到达判定线时按下对应按键。祝你玩得开心!
🎯 完整打包流程
# 1. 安装pyinstallerpip install pyinstaller# 2. 进入项目目录cd my_piano_game# 3. 修改代码,使用 get_resource_path# 4. 打包pyinstaller -F -w --add-data "sounds;sounds" -i icon.ico -n "钢琴节奏大师" piano_game.py# 5. 测试dist\钢琴节奏大师.exe# 6. 分发# 把 dist\钢琴节奏大师.exe 和 sounds文件夹 打包
🔍 核心概念
1. PyInstaller工作原理
2. 资源路径处理
ifhasattr(sys, '_MEIPASS'):# 打包后,从临时目录读取else:# 开发时,从当前目录读取
3. 单文件 vs 文件夹模式
🎨 进阶技巧
1. 隐藏控制台(-w)
游戏程序应该加上 -w,不显示黑窗口。
调试时可以不加,看错误信息。
2. 版本信息
创建 version.txt:
VSVersionInfo( ffi=FixedFileInfo( filevers=(1, 0, 0, 0), prodvers=(1, 0, 0, 0), ... ))
打包时添加:
pyinstaller --version-file version.txt piano_game.py
3. 多平台打包
PyInstaller不能跨平台打包。
❓ 常见问题
Q1:打包后运行闪退
排查步骤:
Q2:sounds文件夹找不到
解决:使用 --add-data "sounds;sounds",并在代码中用 get_resource_path
Q3:exe文件太大
原因:PyInstaller打包了Python解释器和所有库
解决:
Q4:杀毒软件报毒
原因:PyInstaller打包的exe特征码被误报
解决:
Q5:Mac上打包成app
pyinstaller -w --osx-bundle-identifier com.yourname.pianogame piano_game.py
🎉 恭喜你完成第11课!
今天你已经:
你的钢琴游戏现在是一个可以独立运行的软件了!
🎬 下篇预告
第12篇:《系列总结——回顾与扩展》
本系列文章面向零基础小学生,每篇都有详细步骤和配图说明。遇到问题欢迎在评论区留言!关注回复“钢琴”免费获取源代码下载地址。