You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cx_Freeze编译后Tkinter中pyttsx无语音输出问题

我之前也踩过cx_Freeze打包pyttsx后没声音的坑,这种情况通常是依赖文件没打包全或者驱动路径识别错误导致的,给你几个亲测有效的解决方案:

方案1:补全必要的依赖模块

pyttsx在Windows下依赖win32com系列库,你的includes配置里只加了pyttsx相关的模块,可能漏掉了这些底层依赖。修改setup里的includes列表:

includes = ['pyttsx', 'pyttsx.drivers', 'pyttsx.drivers.sapi5', 'win32com.client', 'win32api', 'win32con', 'win32gui']

把这些win32相关模块加进去,cx_Freeze就会把它们打包到exe里。

方案2:手动指定驱动路径

编译成exe后,pyttsx可能找不到驱动文件的位置,你可以在代码里判断是否是打包后的环境,手动把驱动路径添加到搜索列表:

import pyttsx
import os
import sys

# 判断当前是否是编译后的exe运行环境
if getattr(sys, 'frozen', False):
    # 获取cx_Freeze打包后的临时资源目录
    base_resource_path = sys._MEIPASS
    # 把pyttsx的驱动目录添加到搜索路径
    pyttsx.drivers._DRIVER_DIRS.append(os.path.join(base_resource_path, 'pyttsx', 'drivers'))

# 正常初始化语音引擎
engine = pyttsx.init()

这样能让程序在编译后正确定位到sapi5驱动。

方案3:手动复制驱动文件夹到编译目录

有时候cx_Freeze不会自动把pyttsx的驱动文件复制到build目录,你可以在setup里添加include_files配置,手动复制驱动文件夹:

import os
import pyttsx

# 获取sapi5驱动所在的文件夹路径
driver_folder = os.path.dirname(pyttsx.drivers.sapi5.__file__)

# 修改setup的options配置
options = {
    "build_exe": {
        "packages": packages,
        'includes': includes,
        'include_files': [(driver_folder, 'pyttsx/drivers')]
    }
}

这会把驱动文件夹完整复制到编译后的exe目录下,确保程序能找到驱动文件。

额外排查小技巧

  • 尝试右键以管理员身份运行编译后的exe,有时候权限不足会导致无法调用系统语音服务
  • 先在系统设置里测试一下Windows自带的文本转语音功能是否正常,排除系统本身的语音问题

内容的提问来源于stack exchange,提问作者Harshita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:13:01