

第49课做完后,Tyree的语音助手已经能正常工作了。他问:“第40课我们学过打包,那这个语音助手也能打包成exe发给朋友吗?”
我说:“可以,但语音助手比游戏多了一些特殊的地方:麦克风权限、语音引擎、API Key。打包时如果不注意这些,发给朋友也是打不开的。”
Tyree:“那你告诉我这些坑在哪,我去填。”
今天课程只补语音助手打包时需要注意的事项,基础打包方法第40课已经学过,如果忘记了可以返回去复习下哦!
01. 打包前的准备工作
在命令行中执行打包命令之前,必须先进入你的代码文件所在的目录。否则`pyinstaller` 找不到 `voice_assistant.py`。
操作步骤:
1. 打开命令行(cmd 或 PowerShell)。
2. 切换目录
输入 cd F:\编程每一课\49课 回车
将 F:\编程每一课\49课替换成你实际的代码存放路径。
3. 确认文件存在:
输入dir回车
在文件列表中能看到`voice_assistant.py`,说明位置正确。
如果你的文件在桌面:
cd C:\Users\Administrator\Desktop
如果文件在E 盘:
E:
cd E:\my_project
`cd` 表示“切换目录”,后面跟文件夹路径。如果路径中包含空格,需要用引号括起来(如 `cd "F:\编程每一课\49课"`)。

图上这个的.py文件是存在F 盘,ai 文件夹里。
02. 复习第40课学过的打包命令
第40课我们学过 `pyinstaller` 的基本用法。快速复习一下核心命令:
pyinstaller --onefile voice_assistant.py
如果程序有资源文件(如图片、`.env`),需要用 `--add-data`:

这些在第40课已经详细讲过,就不再重复了。
03. 语音助手打包的三个“坑”
我们打包时,需要注意有几个坑
坑1:麦克风权限
打包后的exe 第一次运行时,Windows 会弹出“是否允许此应用访问麦克风”的提示。如果用户点了“否”,语音识别就无法工作。
解决方法:在代码中添加提示,让用户知道需要允许麦克风权限。
在程序开头添加
print("首次运行请允许麦克风权限,否则语音识别无法工作")
坑2:`pyttsx3` 的 COM 依赖
如果程序中使用了`pyttsx3` 做语音朗读,打包时需要包含 SAPI5 相关的 COM 组件。
解决方法:在打包命令中添加隐藏导入:

如果不需要语音朗读功能,可以直接注释掉`pyttsx3` 相关代码(如第49课下集所述),这样打包更干净。
坑3:API Key(环境变量)
如果使用`.env` 文件存储 API Key,打包时需要把 `.env` 文件包含进去。
解决方法:使用`--add-data` 把 `.env` 添加进去:

并且代码中要使用`resource_path()` 函数加载 `.env` 文件(该函数已在第40课中介绍过)。
04. 推荐的打包命令(针对第49课语音助手)
下面这个是针对第49课语音助手的代码的打包命令

如果不需要语音朗读,可以去掉`--hidden-import=win32com.client`。
下面看看打包后的成果展示


上面图显示是打包后生成的文件存在dist 文件夹里,双击运后的界面,看下图示,是我随意输入了一些问题的回答互动!

05. 发给朋友前,先自己测试一遍
打包后,建议按以下步骤测试:
1. 把 `dist/voice_assistant.exe` 复制到一个新文件夹。
2. 确认 `.env` 文件也在同一个文件夹(因为 `--add-data` 会把 `.env` 放到 exe 同级目录,而不是打包进 exe 内部)。
3. 双击运行,测试所有功能是否正常。
4. 如果报错,在命令行中运行 exe 查看错误信息。
06. 本课总结
麦克风权限,首次运行允许权限
`pyttsx3` 依赖,添加
`--hidden-import=win32com.client`
`.env` 文件 ,用`--add-data` 添加
语音朗读,如果不需要,可以注释掉降低打包复杂度
07. 课后小挑战
想挑战的朋友可以做做下面几个挑战,可以增加熟练程度
挑战1:完整打包语音助手
将第49课的语音助手(含语音识别 + AI问答 + 语音朗读)完整打包成一个 exe。
挑战2:对比有无语音朗读的体积差异
分别打包“含语音朗读”和“不含语音朗读”两个版本,对比文件大小差异。
好了,下一节课我们将学习:
爬虫入门——获取网页数据,用`requests` 和 `BeautifulSoup` 从网页抓取数据。
————热门推荐————
自学编程第7课:turtle画图入门(画正方形五角形三角形)
自学编程第一步:安装Python和Thonny(零基础图文教程)
(本系列教程每天更新,欢迎关注收藏)
夜雨聆风