问题
在 macOS(Apple Silicon)上按源码安装并启动 Amadeus,遇到以下问题。
这些问题都会阻止全新环境跑通,且报错信息不易理解。
1. 首次安装必失败:pyaudio 编译报错
pyproject.toml 的必装依赖里有 PyAudio。它在 macOS 上需要先安装
系统库 portaudio 才能编译,否则直接报 portaudio.h not found。
而纯文字聊天(TTS 关闭)根本用不到 PyAudio。
2. 无语音环境启动崩溃
即使跳过 pyaudio 装好了依赖,TTS_BACKEND=disabled 时启动后端仍然崩溃:
server/app.py:654 无条件导入 tts.playback → import pyaudio 报错
3. 本地语音依赖缺失
远程 TTS(如 MiMo)只需要 httpx,但播放音频还需要 scipy、
silero-vad、aec-audio-processing。这些包目前都藏在 local-cu124
可选组里,导致只装基础依赖的用户在播放语音时报
ModuleNotFoundError: No module named 'scipy'。
4. 查找 venv Python 的路径写死了 Windows
asr/registry.py 和 asr/backends/qwen3_asr.py 查找独立运行环境时写死了
.venv_asr/Scripts/python.exe(Windows 目录结构)。macOS/Linux 的
venv 是 .venv_asr/bin/python3,导致探测永远失败。
5. barge-in 检测器顶层导入 torch
asr/barge_in_detector.py 模块级 import torch,且从后端启动流程
(bootstrap)可达。环境里没有 torch 时后端直接崩溃。
6. 麦克风服务顶层导入 torch / pyaudio
asr/mic_input_service.py 模块级导入 torch 和 pyaudio,从启动和
唤醒关闭路径可达,与问题 2 同类。
补充说明:silero-vad 硬依赖 torch
打断检测使用的 silero-vad 包(PyPI 元数据)声明了
torch>=1.12.0 和 torchaudio>=0.12.0。也就是说只要安装打断检测,
torch 必然进入环境——它无法和普通语音功能放在同一层。
这直接影响依赖分层的粒度(见 PR #16 的四级阶梯)。
问题
在 macOS(Apple Silicon)上按源码安装并启动 Amadeus,遇到以下问题。
这些问题都会阻止全新环境跑通,且报错信息不易理解。
1. 首次安装必失败:pyaudio 编译报错
pyproject.toml的必装依赖里有 PyAudio。它在 macOS 上需要先安装系统库 portaudio 才能编译,否则直接报
portaudio.h not found。而纯文字聊天(TTS 关闭)根本用不到 PyAudio。
2. 无语音环境启动崩溃
即使跳过 pyaudio 装好了依赖,
TTS_BACKEND=disabled时启动后端仍然崩溃:3. 本地语音依赖缺失
远程 TTS(如 MiMo)只需要 httpx,但播放音频还需要 scipy、
silero-vad、aec-audio-processing。这些包目前都藏在
local-cu124可选组里,导致只装基础依赖的用户在播放语音时报
ModuleNotFoundError: No module named 'scipy'。4. 查找 venv Python 的路径写死了 Windows
asr/registry.py 和 asr/backends/qwen3_asr.py 查找独立运行环境时写死了
.venv_asr/Scripts/python.exe(Windows 目录结构)。macOS/Linux 的venv 是
.venv_asr/bin/python3,导致探测永远失败。5. barge-in 检测器顶层导入 torch
asr/barge_in_detector.py模块级import torch,且从后端启动流程(bootstrap)可达。环境里没有 torch 时后端直接崩溃。
6. 麦克风服务顶层导入 torch / pyaudio
asr/mic_input_service.py模块级导入 torch 和 pyaudio,从启动和唤醒关闭路径可达,与问题 2 同类。
补充说明:silero-vad 硬依赖 torch
打断检测使用的 silero-vad 包(PyPI 元数据)声明了
torch>=1.12.0和torchaudio>=0.12.0。也就是说只要安装打断检测,torch 必然进入环境——它无法和普通语音功能放在同一层。
这直接影响依赖分层的粒度(见 PR #16 的四级阶梯)。