PyInstaller打包exe调用speech_recognition报WinError50(FLAC错误)求助
问题原因及解决方法
核心原因
本地运行时,speech_recognition库会调用系统中已安装的flac.exe工具处理音频格式转换,但PyInstaller/Auto Py to Exe默认不会自动打包这个外部依赖,导致生成的.exe文件运行时找不到该工具,进而在调用get_flac_data()时抛出OSError: [WinError 50]错误。
解决方案
方法一:手动打包flac.exe并指定路径
- 找到本地的
flac-win32.exe文件:- 若通过pip安装speech_recognition,文件一般在Python安装目录下的
Lib\site-packages\speech_recognition\flac-win32.exe路径中
- 若通过pip安装speech_recognition,文件一般在Python安装目录下的
- 将
flac-win32.exe复制到项目根目录 - 在代码中手动指定flac工具路径,替换默认调用:
import speech_recognition as sr # 手动指定flac工具路径 r = sr.Recognizer() r.flac_executable = "flac-win32.exe" - 打包时务必将
flac-win32.exe加入资源:- Auto Py to Exe:在「Additional Files」选项中添加该文件,设置输出路径为根目录
- PyInstaller:执行命令
pyinstaller --onefile --add-data "flac-win32.exe;." your_script.py
方法二:强制使用WAV格式,跳过FLAC转换
修改音频处理逻辑,直接生成WAV格式数据传给识别接口,彻底规避对flac工具的依赖:
import speech_recognition as sr from io import BytesIO import wave def recognize_from_mic(): r = sr.Recognizer() with sr.Microphone() as source: print("听语音中...") audio = r.listen(source) # 将音频转为WAV格式字节流 wav_io = BytesIO() with wave.open(wav_io, 'wb') as wav_file: wav_file.setnchannels(1) wav_file.setsampwidth(2) wav_file.setframerate(16000) wav_file.writeframes(audio.get_raw_data()) wav_io.seek(0) # 用WAV数据直接调用识别接口 try: result = r.recognize_google(sr.AudioFile(wav_io)) print(f"识别结果: {result}") except sr.UnknownValueError: print("无法识别语音") except sr.RequestError as e: print(f"请求识别服务失败: {e}")
额外注意事项
- 方法一打包后,要保证
flac-win32.exe和生成的.exe文件在同一目录 - 测试打包文件时,直接到输出目录双击.exe运行,避免PyCharm终端的环境干扰
内容的提问来源于stack exchange,提问作者Konstantin_Violinov
相关产品推荐
相关产品推荐

