Alpine Linuxでpip install mysqlclientするのにハマった時のメモ

# 環境
- Alpine Linux 3.13
- Python3

# 何が起きたか
mysqlclientをインストールしたくて以下のコマンドを実行したところ、```OSError: mysql_config not found.```と怒られてしまった。

```bash=
localhost:~# pip install mysqlclient
```

# 解決方法
## 1. mariadb-devとpython3-devをインストール

```bash
localhost:~# apk add python3-dev mariadb-dev
```
[参考資料](https://awesome-linus.com/2019/04/09/django-mysqlclient-install-error/)ではlibmysqlclient-devとあるが、見当たらないので```apk search```で探してそれっぽいもの（mariadb-dev）を見つけた。
改めて```pip install mysqlclient```を実行したところ、今度は以下のように怒られてしまった。

```bash
localhost:~# pip install mysqlclient

Collecting mysqlclient
  Using cached mysqlclient-2.0.3.tar.gz (88 kB)
Using legacy 'setup.py install' for mysqlclient, since package 'wheel' is not installed.
Installing collected packages: mysqlclient
    Running setup.py install for mysqlclient ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-t0g2ij73/mysqlclient_1f7595becde34cc9a57c20ae31140ee9/setup.py'"'"'; __file__='"'"'/tmp/pip-install-t0g2ij73/mysqlclient_1f7595becde34cc9a57c20ae31140ee9/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-d25ff_vg/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/mysqlclient
         cwd: /tmp/pip-install-t0g2ij73/mysqlclient_1f7595becde34cc9a57c20ae31140ee9/

# 中略

 unable to execute 'gcc': No such file or directory
    error: command 'gcc' failed with exit status 1

# 以下略
```

## 2. gccをインストール
gccが実行できないよ！とのことなのでインストールする。

```bash
localhost:~# apk add gcc
```
そして実行。

```bash
localhost:~# pip install mysqlclient

Collecting mysqlclient
  Using cached mysqlclient-2.0.3.tar.gz (88 kB)
Using legacy 'setup.py install' for mysqlclient, since package 'wheel' is not installed.
Installing collected packages: mysqlclient
    Running setup.py install for mysqlclient ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-b19o0790/mysqlclient_d995157d7485408da5d33e0f23e8d465/setup.py'"'"'; __file__='"'"'/tmp/pip-install-b19o0790/mysqlclient_d995157d7485408da5d33e0f23e8d465/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-y7qc2y_l/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/mysqlclient
         cwd: /tmp/pip-install-b19o0790/mysqlclient_d995157d7485408da5d33e0f23e8d465/

# 中略

In file included from MySQLdb/_mysql.c:29:
    /usr/include/mysql/mysql.h:38:10: fatal error: sys/types.h: No such file or directory
       38 | #include <sys/types.h>
          |          ^~~~~~~~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1

# 以下略
```

## 3. libc-devをインストール
sys/type.hがないとのことだったので、調べたところ[こんな記事](https://stackoverflow.com/questions/37771339/sys-types-h-no-such-file-or-directory)が見つかった。これによると、```libc6-dev-i386```なるものをインストールすれば良いらしいが、これまた見当たらないので例によって```apk search```で探してみると、またそれっぽいのが見つかったのでインストールした。

```bash
localhost:~# apk add libc-dev

(1/2) Installing musl-dev (1.2.2-r0)
(2/2) Installing libc-dev (0.7.2-r3)
OK: 413 MiB in 179 packages
```
そして3度目の正直。

```bash
localhost:~# apk add python3-dev

(1/1) Installing python3-dev (3.8.7-r1)
Executing busybox-1.32.1-r3.trigger
OK: 452 MiB in 180 packages
localhost:~# pip install mysqlclient
Collecting mysqlclient
  Using cached mysqlclient-2.0.3.tar.gz (88 kB)
Using legacy 'setup.py install' for mysqlclient, since package 'wheel' is not installed.
Installing collected packages: mysqlclient
    Running setup.py install for mysqlclient ... done
Successfully installed mysqlclient-2.0.3
```

できた。