mod_wsgi インストールでの Python.h: No such file or directory への対処

Ubuntu20.04 + Python3.8 + Apache2 の環境をセットアップしていたときに遭遇した問題への対処の記録。

問題

venv 環境で mod_wsgi を pip インストールしようとしたらエラーが発生した。

Building wheels for collected packages: mod_wsgi
  Building wheel for mod_wsgi (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [11 lines of output]
      running bdist_wheel
      running build
      running build_py
      running build_ext
      building 'mod_wsgi.server.mod_wsgi-py38' extension
      In file included from src/server/mod_wsgi.c:22:
      src/server/wsgi_python.h:26:10: fatal error: Python.h: No such file or directory
         26 | #include <Python.h>
            |          ^~~~~~~~~~
      compilation terminated.
      error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for mod_wsgi
  Running setup.py clean for mod_wsgi

venv 環境だから起きるのかはわからないが、とりあえず gcc が Python.h が無いと言っている。

対処

とりあえずこの1個前段階で別のエラーが出ていたので apache2-dev をインストール。Ubuntu 以外のディストリビューションだとパッケージの名前が違うらしいので注意。

$ sudo apt install apache2-dev

それで本題。Python.h が見つからない問題は、python3.8-dev をインストールする。

$ sudo apt install python3.8-dev

これで mod_wsgi の pip インストールも上手くいった。apt で指定するパッケージ名の .8 を忘れると別のバージョン(たぶん3.6)がインストールされるので要注意。