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_DIRPYFFTW_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