pyenv installすると_ctypes云々でエラー in archlinux


ある日

会社のarch linux環境でpyenvを入れたら pyenv install 3.7.1 でコケるようになってしまった
ぐぐっても情報なかったので参考になれば幸いです

結論

$ sudo pacman -S libffi
$ LDFLAGS="-L/usr/lib" CFLAGS="-I/usr/lib/libffi-3.2.1/include -O2" pyenv install 3.7.1
Downloading Python-3.7.1.tar.xz...
-> https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
Installing Python-3.7.1...
Installed Python-3.7.1 to /home/kc5m/.pyenv/versions/3.7.1

過程

$ pyenv install 3.7.1
...
ModuleNotFoundError: No module named '_ctypes'
...

上記のようなエラーが出て早速ぐぐると以下の記事が。
https://qiita.com/hitochan777/items/941d4422c53978b275f8
なるほどlibffiを入れれば良いのだなと # pacman -S libffi をしてみたものの同じエラーで止まる。3.6.5でも同様だ。

どうせいつものncurses5互換ライブラリの問題だろと入れてみたものの変わらず
とりあえずlibffiパッケージに含まれているファイルを確認してみる

$ pacman -Fl libffi
libffi usr/
libffi usr/lib/
libffi usr/lib/libffi-3.2.1/
libffi usr/lib/libffi-3.2.1/include/
libffi usr/lib/libffi-3.2.1/include/ffi.h
libffi usr/lib/libffi-3.2.1/include/ffitarget.h
libffi usr/lib/libffi.so
libffi usr/lib/libffi.so.6
libffi usr/lib/libffi.so.6.0.4
libffi usr/lib/pkgconfig/
...

ここでヘッダファイルが変な位置(/usr/includeに配置されると思ってた)にあると気がつく
とりあえず試してみる

$ LDFLAGS="-L/usr/lib" CFLAGS="-I/usr/lib/libffi-3.2.1/include -O2" pyenv install 3.7.1
Downloading Python-3.7.1.tar.xz...
-> https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
Installing Python-3.7.1...
Installed Python-3.7.1 to /home/kc5m/.pyenv/versions/3.7.1

通った。
めでたしめでたし

余談

自宅環境の幾つかのarchlinuxでは上記エラーが再現しなかった。
しかもそれら環境にはlibffiが入っていない。