【问题】
如果正常按照网上的教程,在terminal先使用brew安装portaudio(brew install portaudio),再使用pip在conda环境里安装pyaudio(pip install pyaudio),然后python直接导入pyaudio(import pyaudio)会报错如下:
【分析】
可知报错来自于portaudio动态库。网上搜索解决方案,除了重装、重启外,就是使用pip的 --global-option 命令去手动添加portaudio的头文件(https://github.com/OpenInterpreter/01/issues/68):
pip install --global-option='build_ext' --global-option='-I/opt/homebrew/Cellar/portaudio/19.7.0/include' --global-option='-L/opt/homebrew/Cellar/portaudio/19.7.0/lib' pyaudio.
然而新版的pip(我用的24.2)早就不支持--global-option命令了。我尝试按照这个解决方案的精神,自行下载编译portaudio,然后再手动下载pyaudio的包,在其setup.py手动添加portaudio/include和portaudio/lib的路径,并在其setup.cfg文件中添加相应内容,都无法解决。我觉得博主“你若向前”说的可能有道理(https://blog.csdn.net/StoryZX/article/details/123150790),也许是苹果芯片采用了ARM64架构的原因,具体还未研究清楚。
【解决】
最终解决方案是偶然试出来的。安装库sounddevice:pip install sounddevice,然后在导入pyaudio前先倒入sounddevice,就不会报错了:
import sounddevice
import pyaudio
而且确实是sounddevice的作用,因为如果只导入sounddevice所依赖的包(在sounddevice.py中),依然产生相同报错。
依然不知道为什么。。期待大神解答,反正目前问题是解决了。