Streamlit+Sounddevice部署Heroku遇OSError: PortAudio库未找到求助
解决Heroku部署Streamlit+sounddevice时的PortAudio缺失问题
我之前在部署依赖sounddevice的Python应用到Heroku时,也碰到过一模一样的OSError: PortAudio library not found错误!原因很简单:Heroku的默认Python运行环境里没有预装PortAudio这个系统级依赖库,而sounddevice必须依赖它才能工作(本地运行正常是因为你的电脑系统已经自带了PortAudio,或者安装sounddevice时自动帮你装了)。
下面是亲测有效的解决方案:
方法一:通过Heroku Apt Buildpack安装PortAudio
这是最直接的解决方式,步骤如下:
- 在你的GitHub仓库根目录新建一个名为
Aptfile的文件,文件内容只需要一行:portaudio19-dev - 登录Heroku控制台,找到你的应用,进入Settings页面,在Buildpacks区域点击Add buildpack,添加Heroku官方的apt buildpack(用于安装系统级软件包)。
- 确保apt buildpack的优先级在Python buildpack之前(如果你的应用已经添加了Python buildpack的话),这样Heroku会先安装系统依赖,再安装Python包。
- 重新部署你的应用,这时Heroku会先通过apt安装PortAudio开发库,再安装
requirements.txt里的sounddevice,之后就能正常导入使用了。
备选方法:改用无PortAudio依赖的音频库
如果上面的方法遇到问题,或者你的音频处理需求比较简单,可以考虑替换成不需要依赖PortAudio的Python库,比如:
- 如果是处理音频文件而非实时录制/播放,
wave、pydub(需要ffmpeg,但Heroku也可以通过buildpack安装)都是不错的选择 - 要是必须实时处理,也可以看看有没有其他基于纯Python实现的音频库
补充:错误回溯里的
sounddevice.py第71行报错,就是因为它在加载时找不到系统里的PortAudio库,只要通过apt buildpack装上这个库,就能解决这个问题。
内容的提问来源于stack exchange,提问作者emk
相关产品推荐
相关产品推荐

