我正在尝试在带有 M1 芯片(Big Sur)的新 Macbook Air 上安装 pyaudio。起初我无法克服著名的
src/_portaudiomodule.c:29:10: fatal error: 'portaudio.h' file not found
错误。我记得我的另一台笔记本电脑上也有这个问题,但随后一个简单的brew install portaudio
解决了它。 好吧,这次不是。
在尝试了很多不同的事情之后,终于找到了这个指南,在找到我的自制目录后,我可以这样做:
export LIBRARY_PATH=/opt/homebrew/lib/:$LIBRARY_PATH
- 与 C_INCLUDE 相同
完成此操作后,pyaudio 安装正常!但是,现在当我尝试将 pyaudio 导入任何 python 程序并运行它时,我收到错误:
Traceback (most recent call last):
File "/Users/bende/GitHub/fretboard-learner/main.py", line 5, in <module>
import pyaudio
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pyaudio.py", line 116, in <module>
import _portaudio as pa
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/_portaudio.cpython-39-darwin.so, 2): Symbol not found: _PaMacCore_SetupChannelMap
Referenced from: /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/_portaudio.cpython-39-darwin.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/_portaudio.cpython-39-darwin.so
我尝试用谷歌搜索但无济于事,我真的不确定发生了什么。我能想到的是它必须对 M1 芯片做一些事情,因为安装在非 M1 mac 上运行得很好。
有谁知道这可能是什么原因造成的吗?
不知道你是否还需要这个解决方案,但这是我经过几个小时的谷歌搜索后得到的(我也拥有一台 Mac m1):
我一开始无法安装PyAudio,甚至在成功安装PyAudio后也遇到问题。我使用与brew一起安装的python 3.9来完成这个过程。
如果事情进展不顺利,重新启动终端可能会有所帮助。
对于那些必须使用 Arm 架构尚不可用的 Python 包的人,我们必须恢复到基于 Intel 的 Python 包。这不是小事,花了我几乎一天的时间,所以我将其描述为有需要的人的一些时间。
这是您需要做的:
在 Rosetta 下运行终端 获取信息 |在罗塞塔下运行
安装自制程序作为基于英特尔的版本
在 (1) 中创建的终端中,运行:
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
在.bash_profile中,插入:
alias ibrew="arch -x86_64 /usr/local/bin/brew"
使用步骤(3)中的brew,运行:
ibrew install --build-from-source -vd boost
ibrew install --build-from-source -vd boost-python3
使用步骤(3)中的brew,运行:
ibrew install portaudio
ibrew link portaudio
KEY:这会将 portaudio 安装到 /usr/local/Cellar/portaudio/19.7.0,并且必须在 pyaudio 安装时引用!!!
我们现在可以使用基于 intel 的自制软件安装的 portaudio 版本来安装 pyaudio。 /portaudio/后的版本号可能会有所不同,请根据您的版本号进行调整。
python -m pip install --global-option='build_ext' --global-option='-I/usr/local/Cellar/portaudio/19.7.0/include' --global-option='-L/usr/local/Cellar/portaudio/19.7.0/lib' --force pyaudio
在排除相同问题时(包括按照 momoclouq 在这个问题上的回答中的步骤进行操作),我也遇到了这个错误。我最终的解决方案是:
我的自制程序仅安装在 /usr/local 中,用于 Rosetta 模拟(Intel)代码。请参阅 this Stackoverflow 问题/答案。
一旦我在
/opt/homebrew
下正确安装了 ARM64 的自制软件,我就删除了之前的 portaudio 安装并执行了以下操作:
$arch -arm64 /opt/homebrew/bin/brew install portaudio
$pip3 install --no-cache-dir --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
确保此路径与您的 arch arm64 portaudio 安装对齐。第一个答案很有帮助,但全局选项不再起作用,所以这里是更新的命令序列:
(我在 Mac M1 上运行这个)
# uninstall previous version of portaudio + PyAudio
pip uninstall pyaudio
brew uninstall portaudio
# make sure default stuff set up
python3 -m pip install --upgrade pip setuptools wheel
# reinstall portaudio and pyaudio
brew install portaudio --HEAD
export CFLAGS="-I/opt/homebrew/include"
export LDFLAGS="-L/opt/homebrew/lib"
python3 -m pip install pyaudio