导入 pyaudio 不起作用 - 未找到符号:mac 上的 _PaMacCore_SetupChannelMap (Big Sur M1 Apple Silicon)

问题描述 投票:0回答:4

我正在尝试在带有 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 上运行得很好。

有谁知道这可能是什么原因造成的吗?

python pyaudio portaudio apple-silicon apple-m1
4个回答
11
投票

不知道你是否还需要这个解决方案,但这是我经过几个小时的谷歌搜索后得到的(我也拥有一台 Mac m1):

我一开始无法安装PyAudio,甚至在成功安装PyAudio后也遇到问题。我使用与brew一起安装的python 3.9来完成这个过程。

  1. 卸载以前版本的 portaudio + PyAudio
  2. (可选)使用 Brew 主页上的命令安装 Mac m1 支持的最新 Brew
  3. (可选)安装wheel和setuptools:python3 -m pip install --upgrade pip setuptoolswheel
  4. 安装最新版本的portaudio(我相信这是核心问题,稳定版本19.6.0不起作用):brew install portaudio --HEAD
  5. 使用 pip 安装 PyAudio: python3 -m pip install pyaudio --global-option="build_ext" --global-option="-I/opt/homebrew/include" --global-option="-L/opt/homebrew /lib”

如果事情进展不顺利,重新启动终端可能会有所帮助。


1
投票

适用于基于 Intel 的自制软件安装

对于那些必须使用 Arm 架构尚不可用的 Python 包的人,我们必须恢复到基于 Intel 的 Python 包。这不是小事,花了我几乎一天的时间,所以我将其描述为有需要的人的一些时间。

这是您需要做的:

  1. 在 Rosetta 下运行终端 获取信息 |在罗塞塔下运行

  2. 安装自制程序作为基于英特尔的版本

在 (1) 中创建的终端中,运行:

arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  1. 为基于英特尔的自制软件创建别名

在.bash_profile中,插入:

alias ibrew="arch -x86_64 /usr/local/bin/brew"
  1. 安装 boost 和 boost_python 库:

使用步骤(3)中的brew,运行:

ibrew install --build-from-source -vd boost
ibrew install --build-from-source -vd boost-python3
  1. 安装端口音频

使用步骤(3)中的brew,运行:

ibrew install portaudio
ibrew link portaudio

KEY:这会将 portaudio 安装到 /usr/local/Cellar/portaudio/19.7.0,并且必须在 pyaudio 安装时引用!!!

  1. 安装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

0
投票

在排除相同问题时(包括按照 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 安装对齐。

0
投票

第一个答案很有帮助,但全局选项不再起作用,所以这里是更新的命令序列:

(我在 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

https://stackoverflow.com/a/73930804/4656769

© www.soinside.com 2019 - 2024. All rights reserved.