pyfftwをM1 macにインストール
さすがのM1 macといえどFFTはできれば速くしたい処理の1つですよね。そこでpyfftwをインストールしようとしたら躓いたのでシェアしたいと思います。
環境
- Macbook pro, M1, macOS Monterey (12.3.1)
- python 3.9
- Cython 0.29.30
- fftw 3.3.10 (hombebrewでインストール)
- pyfftw 0.13.0
現象
homebrewでfftwをインストールした後、
brew install fftw
必要ライブラリをインストールして、
pip install numpy cython
pyfftwをインストールしようとすると以下の様なエラーでインストールできませんでした。
... DEBUG:__main__:Checking with includes ['fftw3.h']...no error: Could not find the FFTW header 'fftw3.h' ...
どうやらhomebrewでインストールしたfftwを見つけられないようです。
Workaround
下記のコマンドでインストールに成功しました。
PYFFTW_LIB_DIR="/opt/homebrew/lib" PYFFTW_INCLUDE="/opt/homebrew/include" CFLAGS="-Wno-error=implicit-function-declaration" pip install pyfftw
環境変数PYFFTW_LIB_DIR
とPYFFTW_INCLUDE
でhomebrewでインストールしたfftwのヘッダーファイルの場所を与えてやります。
CFLAGSを追加しているのは下記のエラーを回避するためです。(Building on Python 3.9 / macOS 10.15.6 fails without -Wno-error=implicit-function-declaration · Issue #303 · pyFFTW/pyFFTW)
error: implicit declaration of function 'fftwl_plan_dft' is invalid in C99