mysqlclientがインストールできない。
CentOS Stream release 8 環境で mysqlclient がインストールできない。
DjangoのデータベースにMySQLを使おう!と思い立った。
すでに構築済みのMySQLに接続するためには必要となる「mysqlclient」をインストールしよう「$ pip install mysqlclient」を実行したところエラーとなってなかなかインストールできなかった。
同じように悩む人のためのメモ
結論:(手っ取り早く解決したい人向け)
mysqlclientのインストールに必要なパッケージは「mysql-devel」「gcc」「python3-devel」の3項目でした。
なのでまとめてdnfでインストールしておけば問題に遭遇しません。
$ dnf install mysql-devel gcc python3-devel
経緯:(興味がある人向け)
まず「mysqlclient」のインストールを実行
$ pip install mysqlclient
早速エラーがでてインストールは完了しなかった。
Collecting mysqlclient
Using cached mysqlclient-2.1.0.tar.gz (87 kB)
Preparing metadata (setup.py) ... error
ERROR: Command errored out with exit status 1:
・
・中略
・
/bin/sh: mysql_config: コマンドが見つかりません
/bin/sh: mariadb_config: コマンドが見つかりません
/bin/sh: mysql_config: コマンドが見つかりません
・
・中略
・
OSError: mysql_config not found
----------------------------------------
目立つところでは「/bin/sh: mysql_config: コマンドが見つかりません」と言われている。
なので「dnf provides」で「mysql_config」が含まれるpkgを検索してみる
$ dnf provides mysql_config
・
・中略
・
mysql-devel-8.0.26-1.module_el8.4.0+915+de215114.x86_64 : Files for development of MySQL applications
Repo : appstream
一致:
ファイル名 : /usr/bin/mysql_config
がHitした。素直に「mysql-devel」をインストール
$ sudo dnf install mysql-devel
「mysql-devel」のインストールが完了したため再度「pip install mysqlclient」を実行すると次は
$ pip install mysqlclient
・
・中略
・
Running setup.py install for mysqlclient ... error
ERROR: Command errored out with exit status 1:
・
・中略
・
unable to execute 'gcc': No such file or directory
error: command 'gcc' failed with exit status 1
----------------------------------------
ERROR: Command errored out with exit status 1: /home/webadmin/omnibus/omnibusenv/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-fyol_65_/mysqlclient_3c9466e79625430b8854a5c6b8d480e8/setup.py'"'"'; __file__='"'"'/tmp/pip-install-fyol_65_/mysqlclient_3c9466e79625430b8854a5c6b8d480e8/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-wvn_8h12/install-record.txt --single-version-externally-managed --compile --install-headers /home/webadmin/omnibus/omnibusenv/include/site/python3.6/mysqlclient Check the logs for full command output.
またもやエラー・・・目立ったところでは「unable to execute 'gcc’: No such file or directory」「error: command 'gcc’ failed with exit status 1」といったところでしょうか
なので次は「gcc」をインストール
$ sudo dnf install gcc
再度「mysqlclient」をインストールしたが早速エラー
$ pip install mysqlclient
Collecting mysqlclient
Using cached mysqlclient-2.1.0.tar.gz (87 kB)
Preparing metadata (setup.py) ... done
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:
・
・中略
・
MySQLdb/_mysql.c:46:10: 致命的エラー: Python.h: そのようなファイルやディレクトリはありません
#include "Python.h"
^~~~~~~~~~
コンパイルを停止しました。
error: command 'gcc' failed with exit status 1
----------------------------------------
ERROR: Command errored out with exit status 1:
・
・中略
・
次は「Python.h」というファイルが見つからないようです。
単純に「$ dnf provides Python.h」で検索してみるものの「エラー: 一致したものは見つかりませんでした」との表示。
なのでインターネットで検索してみると「python3-dev」に含まれている。との情報が散見された。
素直に「$ sudo dnf install python3-devel」を実行してみるとインストールされるパッケージが「python36-devel」となる模様
不安になったのでdnfインストールを中断して自環境のPythonのバージョンを「python -V」で確認すると「Python 3.6.8」だった
なので安心して再度「$ sudo dnf install python3-devel」を実行して依存関係も含めインストール
$ sudo dnf install python3-devel
再び「$ pip install mysqlclient」を実行する。
$ pip install mysqlclient
Collecting mysqlclient
Using cached mysqlclient-2.1.0.tar.gz (87 kB)
Preparing metadata (setup.py) ... done
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.1.0
「Successfully installed mysqlclient-2.1.0」と返ってきたのでこれで「mysqlclient」のインストールは完了
以上