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

在macOS Ventura上运行pyttsx3代码报错:NameError: name 'objc' is not defined

解决macOS Ventura下pyttsx3运行时NameError: name 'objc' is not defined问题

问题场景

  • 系统:macOS Ventura 13.6
  • Python版本:3.11.5
  • 运行代码:
import pyttsx3

engine = pyttsx3.init()

engine.say("Hello, how are you today?")

engine.runAndWait()
  • 报错信息:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyttsx3/__init__.py", line 20, in init
    eng = _activeEngines[driverName]
          ~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/weakref.py", line 136, in __getitem__
    o = self.data[key]()
        ~~~~~~~~~^^^^^
KeyError: None

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/raelynmarie/Desktop/Tester.py", line 3, in <module>
    engine = pyttsx3.init()
             ^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyttsx3/__init__.py", line 22, in init
    eng = Engine(driverName, debug)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyttsx3/engine.py", line 30, in __init__
    self.proxy = driver.DriverProxy(weakref.proxy(self), driverName, debug)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyttsx3/driver.py", line 50, in __init__
    self._module = importlib.import_module(name)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyttsx3/drivers/nsss.py", line 12, in <module>
    class NSSpeechDriver(NSObject):
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyttsx3/drivers/nsss.py", line 13, in NSSpeechDriver
    @objc.python_method
     ^^^^
NameError: name 'objc' is not defined. Did you mean: 'object'?

已尝试按pyobjc-core、pyobjc-framework-Cocoa、pyobjc-framework-Quartz、pyobjc顺序重装依赖,问题仍存在。


解决方案

1. 校验Python环境一致性

先确认当前执行代码的Python版本与安装依赖的版本一致:

which python3
python3 --version

如果使用虚拟环境,确保已激活虚拟环境后再执行后续操作。

2. 彻底清理并重装依赖

完全卸载相关包,清理缓存后重新安装:

# 卸载所有相关包
pip3 uninstall -y pyobjc-core pyobjc-framework-Cocoa pyobjc-framework-Quartz pyobjc pyttsx3

# 清理pip缓存
pip3 cache purge

# 重新安装,优先安装核心依赖
pip3 install pyobjc-core
pip3 install pyobjc
pip3 install pyttsx3

注:安装pyobjc会自动拉取所需的Cocoa、Quartz等framework依赖,无需单独安装。

3. 测试objc依赖是否正常

编写简单脚本验证objc能否正常导入:

import objc
from Foundation import NSObject
print("objc模块导入成功")

若脚本运行无报错,说明objc依赖已正确安装,再尝试运行原pyttsx3代码。

4. 手动指定pyttsx3驱动

强制指定macOS原生的nsss驱动初始化引擎:

import pyttsx3
engine = pyttsx3.init(driverName='nsss')
engine.say("Hello, how are you today?")
engine.runAndWait()

5. 降级pyttsx3版本

若上述方法无效,尝试安装兼容性更稳定的pyttsx3版本:

pip3 install pyttsx3==2.90

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:00:59