任务: 将“外星人入侵”这个 pygame 项目打包成 exe 文件。下面是详细步骤:
1. 安装 PyInstaller
在终端(命令提示符)中运行:
pip install pyinstaller
2. 进入项目目录
在终端中切换到你的项目文件夹
3. 执行打包命令
假设你的主程序文件叫 alien_invasion.py
,运行:
pyinstaller --onefile --windowed alien_invasion.py
--onefile
:生成单个 exe 文件。--windowed
:不显示命令行窗口(适用于 GUI 程序)。
4. 查找生成的 exe 文件
打包完成后,在 dist
文件夹下会生成 alien_invasion.exe
。
注意事项
- 如果有图片、音效等资源文件,需要手动复制到 exe 所在目录,或者用
--add-data
参数打包资源。 - 如果遇到缺少模块或资源路径问题,可以进一步调整 PyInstaller 的参数
5 如何用 --add-data 参数打包资源
假设你的资源(如 images、sounds 文件夹)在项目根目录下,可以这样使用 --add-data
参数:
pyinstaller --onefile --windowed --add-data "images;images" --add-data "sounds;sounds" alien_invasion.py
--add-data "源路径;目标路径"
Windows 下用分号;
分隔,Linux/macOS 用冒号:
。- 上述命令会把
images
和sounds
文件夹一起打包,并在 exe 运行时解压到同名目录。
注意:
打包后,访问资源文件时建议用如下方式获取路径:
import sys
import os
def resource_path(relative_path):
"""获取资源文件的绝对路径,兼容打包后和开发环境"""
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
6 打包后 生成的build、dist,main.spec解释
打包后,PyInstaller 会在你的项目目录下生成以下文件夹和文件:
1). build 文件夹
- 作用:存放 PyInstaller 打包过程中的临时文件和中间产物。
- 内容:编译缓存、分析依赖的临时数据等。
- 是否需要:对最终发布无用,可以删除。
2). dist 文件夹
- 作用:存放最终生成的可执行文件(exe)及其依赖。
- 内容:
- 如果用
--onefile
,里面只有一个 exe 文件(如main.exe
)。 - 如果不用
--onefile
,会有一个文件夹,里面包含 exe 和所有依赖的 dll、pyd、资源等。
- 如果用
- 是否需要:这是你要分发给别人的文件夹。
3). main.spec 文件
- 作用:PyInstaller 的“配置脚本”,描述如何打包你的项目。
- 内容:包括入口文件、依赖、资源文件、打包选项等。
- 用途:
- 可以手动编辑,定制更复杂的打包需求(如添加多个数据文件、修改打包行为等)。
- 用
pyinstaller main.spec
可以按 spec 文件重新打包。