M1 Mac(macOS14)pip安装PyAudio报AttributeError错误求助
在M1 MacBook上安装PyAudio失败的解决方法
问题重现
执行pip install PyAudio时出现以下错误:
Collecting PyAudio Using cached PyAudio-0.2.13.tar.gz (46 kB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [33 lines of output] Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module> main() File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main json_out['return_val'] = hook(**hook_input['kwargs']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 112, in get_requires_for_build_wheel backend = _build_backend() ^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend obj = import_module(mod_path) ^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/importlib/__init__.py", line 90, in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1381, in _gcd_import File "<frozen importlib._bootstrap>", line 1354, in _find_and_load File "<frozen importlib._bootstrap>", line 1304, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1381, in _gcd_import File "<frozen importlib._bootstrap>", line 1354, in _find_and_load File "<frozen importlib._bootstrap>", line 1325, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 929, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 994, in exec_module File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed File "/private/var/folders/vg/yf8x9j0s3fs6n318p6h_zmmm0000gn/T/pip-build-env-67bkfpiz/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 16, in <module> import setuptools.version File "/private/var/folders/vg/yf8x9j0s3fs6n318p6h_zmmm0000gn/T/pip-build-env-67bkfpiz/overlay/lib/python3.12/site-packages/setuptools/version.py", line 1, in <module> import pkg_resources File "/private/var/folders/vg/yf8x9j0s3fs6n318p6h_zmmm0000gn/T/pip-build-env-67bkfpiz/overlay/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2191, in <module> register_finder(pkgutil.ImpImporter, find_on_path) ^^^^^^^^^^^^^^^^^^^ AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'? [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip.
错误原因
Python 3.12移除了pkgutil.ImpImporter API,而PyAudio源码包依赖的旧版构建工具(setuptools/pkg_resources)仍在调用这个已废弃的接口。同时官方PyAudio没有提供M1芯片(arm64架构)的预编译wheel,导致pip需要从源码编译,触发了兼容性问题。
可行解决方案
方法1:通过Homebrew安装依赖后编译安装
- 安装PortAudio(PyAudio的底层音频依赖库):
brew install portaudio - 用pip安装PyAudio时指定PortAudio的路径,确保编译能找到依赖:
pip install pyaudio --global-option='build_ext' --global-option='-I/opt/homebrew/include' --global-option='-L/opt/homebrew/lib'
方法2:使用conda安装预编译包
如果你使用conda环境,可以直接安装适配M1架构的预编译PyAudio包,无需手动编译:
conda install -c conda-forge pyaudio
方法3:降级Python版本(临时方案)
如果上述方法无法执行,可以暂时降级到Python 3.11。Python 3.11仍保留pkgutil.ImpImporter接口,且PyAudio有适配的预编译wheel,直接执行:
pip install pyaudio
内容的提问来源于stack exchange,提问作者Aum Pandya
相关产品推荐
相关产品推荐

