mysqlclientがインストールできない。

2022年1月13日

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」のインストールは完了

以上

 

 

 

Linux