📝

fatal error: 'portaudio.h' file not found

2024/08/02に公開

環境

m1 macbook pro

本題

PyAudioをpipでインストールしようとする時に出るやつですね。

portaudioというライブラリが足りてないようなので、相変わらずMacPortsで入れます。
https://ports.macports.org/port/portaudio/

インストール確認、OK.

port installed | grep portaudio
  portaudio @20240308-88ab584e_0 (active)

ただ、これだけだと、pip install PyAudioを実行しても、同じエラーが出ます。

ヘッダーファイルの場所はどこ?

port info portaudioだと見れないみたいでした。
他にいい方法が見つからなかったので、今までの経験と勘により、
/opt/local/include/portaudio.hに見つけました。

どうやって、ヘッダーファイルの場所をpipに伝えるの?

https://qiita.com/flatfisher/items/3a8fd8140d906c5a320c
まずは、こちらの記事を参考にさせていただきました。

$ pip install --global-option='build_ext' --global-option='-I/usr/local/include' --global-option='-L/usr/local/lib' PyAudio

DEPRECATION: --build-option and --global-option are deprecated. pip 24.2 will enforce this behaviour change. A possible replacement is to use --config-settings. Discussion can be found at https://github.com/pypa/pip/issues/11859
WARNING: Implying --no-binary=:all: due to the presence of --build-option / --global-option. 

DEPRECATIONとWARNINGは関係ないですが、失敗しました。
関係はないんですが、新しい方法でやってみたかったので、pipのマニュアルを見ながら下記を実行しました。

$ pip install -C='build_ext' -C='-I/usr/local/include' -C='-L/usr/local/lib' PyAudio
ERROR: Could not build wheels for PyAudio, which is required to install pyproject.toml-based projects

今度は、別のエラーが出ました。
pyproject.tomlは確かに存在していましたし、poetryは今後も使っていくでしょうから、根本的に解決したいです。

やっとインストールできた

https://qiita.com/yukilab/items/d50a10f1d46c44ae0757
上記参考にさせていただき、${HOME}/.pydistutils.cfgを下記のように設定してみました。

[build_ext]
include_dirs=/opt/local/include
library_dirs=/opt/local/lib

homebrewを使ってないので、localに変えてます。これでインストールできました。

しくみのテックブログ

Discussion