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

部署在DigitalOcean的Django应用遇PyAudio输入设备错误求助

解决方案:PyAudio在DigitalOcean App Platform容器中找不到默认输入设备

1. 先修复ffmpeg缺失的警告

报错日志里的Couldn't find ffmpeg or avconv警告会影响音频文件处理,需先在系统依赖中添加ffmpeg。

2. 核心问题:容器环境无物理音频输入设备

DigitalOcean App Platform的容器运行环境没有挂载任何物理音频输入设备,PyAudio默认会尝试访问本地麦克风,因此抛出OSError: No Default Input Device Available。根据应用场景分两种解决方式:

场景A:应用处理上传的音频文件(无需实时录音)

这是语音转文字功能的常见场景——如果你的功能是处理用户上传的音频文件,而非实时录制,直接修改代码即可:

  • 移除所有调用PyAudio打开输入流的代码(比如pyaudio.PyAudio().open(input=True, ...)这类逻辑)
  • 改用直接读取音频文件的方式处理(比如用pydub.AudioSegment.from_file()读取上传文件,再执行后续转写操作)

场景B:必须模拟音频输入设备(如测试场景)

如果确实需要虚拟音频设备支持,在Dockerfile中添加配置创建虚拟ALSA设备:

修改后的Dockerfile

# 使用官方Python镜像作为基础
FROM python:3.10-slim

# 设置工作目录
WORKDIR /app

# 先安装系统依赖(包括ffmpeg和虚拟音频设备组件)
RUN apt-get update && apt-get install -y --no-install-recommends \
    apt-utils \
    portaudio19-dev \
    python3-dev \
    gcc \
    ffmpeg \
    alsa-utils \
    libasound2-plugins \
    && rm -rf /var/lib/apt/lists/*

# 配置虚拟音频设备,让PyAudio识别默认设备
RUN echo "pcm.!default {
    type plug
    slave.pcm 'null'
}
ctl.!default {
    type hw
    card 0
}" > /etc/asound.conf

# 复制项目文件到容器
COPY . /app

# 安装Python依赖(含gunicorn和pyaudio)
RUN pip install --no-cache-dir -r requirements.txt gunicorn pyaudio

# 暴露应用端口
EXPOSE 8000

# 启动应用命令
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--worker-tmp-dir", "/dev/shm", "speechai.wsgi:application"]

关键优化说明

  • 调整依赖安装顺序:先装系统依赖,再装Python依赖,避免因系统库缺失导致pip安装失败
  • 移除重复的PyAudio安装:只保留pip install pyaudio,避免apt与pip安装的版本冲突
  • 添加--no-install-recommends并清理apt缓存,减小镜像体积
  • 通过asound.conf配置虚拟null音频设备,让PyAudio能识别到默认设备

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:35:55