CentOS7.9下Python3.6安装mysqlclient报mysql_config未找到问题
问题核心原因
- 报错
OSError: mysql_config not found的本质是mysqlclient编译时需要调用MySQL/MariaDB提供的开发工具(mysql_config)和C语言头文件,当前系统缺失对应组件 - 你之前安装mariadb-devel时报依赖冲突,是因为系统已经安装了MySQL官方提供的
mysql-community-libs-8.0.22-1.el7,该包会标记CentOS自带的mariadb-libs为废弃版本,CentOS base源中的mariadb-devel强制依赖固定版本的mariadb-libs,二者版本不兼容所以无法直接安装 - 你之前执行的
yum install mysql-devel未生效,是因为CentOS7的base源已经将mysql-devel的包指向了mariadb-devel,和当前系统的MySQL版本不匹配 - 同版本CentOS7 Docker容器无该问题,是因为干净容器默认没有安装MySQL官方8.0系列的库组件,安装mariadb-devel不会触发版本冲突
可落地解决方法
方法1:匹配已安装MySQL版本安装官方开发包(推荐)
这个方法不会破坏现有已安装的MySQL依赖,稳定性最高:
- 安装和当前已装
mysql-community-libs完全同版本的官方开发包,执行命令:yum install mysql-community-devel-8.0.22-1.el7 - 安装完成后验证mysql_config是否正常:
which mysql_config
正常会输出可执行文件的路径,比如/usr/bin/mysql_config - 重新激活Python3.6虚拟环境,执行pip安装命令即可:
pip install mysqlclient==2.0.3
方法2:手动指定编译参数绕过依赖检查
如果不想改动yum包安装流程,可以直接利用现有MySQL安装路径下的config文件完成编译:
- 先找到当前系统中mysql_config的实际路径,一般MySQL8.0默认安装路径下该文件位于
/usr/bin/mysql_config,可通过命令排查:find /usr -name mysql_config - 给pip安装过程指定对应的编译参数,跳过自动查找mysql_config的逻辑:
export MYSQLCLIENT_CFLAGS=$(mysql_config --cflags)export MYSQLCLIENT_LDFLAGS=$(mysql_config --libs)
之后在虚拟环境中重新执行pip install mysqlclient==2.0.3即可
避坑提醒
- 不要强行执行
yum install mariadb-devel --skip-broken:这种操作会跳过版本校验安装不匹配的包,后续会出现MySQL客户端连接失败、系统库冲突等问题 - 不要强删现有已安装的
mysql-community-libs:强删会导致系统依赖MySQL的所有服务(比如你部署的Airflow)出现连接异常 - 开发包版本必须和数据库客户端库版本完全一致:哪怕小版本号不匹配,编译mysqlclient时也会出现头文件不兼容、链接报错的问题
内容的提问来源于stack exchange,提问作者AnupaM
相关产品推荐
相关产品推荐

