Centos操作系统新安装的Python3中安装mysqlclient库

news2024/11/26 9:41:00

问题简介:

        mysqlclient 是python中的一个连接MySQL数据库的重要的三方库,但是在centos中使用pip3 install mysqlclient 方法安装一直报错,经过两天时间的排查,终于找到了解决问题的方法。

[root@d3acd2b8211d /]# pip3 install mysqlclient
Collecting mysqlclient
  Using cached mysqlclient-2.2.0.tar.gz (89 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error
  
  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [22 lines of output]

      Trying pkg-config --exists mysqlclient
      Command 'pkg-config --exists mysqlclient' returned non-zero exit status 1.
      Trying pkg-config --exists mariadb
      Command 'pkg-config --exists mariadb' returned non-zero exit status 1.
      Traceback (most recent call last):
        File "/usr/local/python3.8/lib/python3.8/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/usr/local/python3.8/lib/python3.8/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/usr/local/python3.8/lib/python3.8/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/tmp/pip-build-env-p5b_my6i/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
        File "/tmp/pip-build-env-p5b_my6i/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-p5b_my6i/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 338, in run_setup
          exec(code, locals())
        File "<string>", line 154, in <module>
        File "<string>", line 48, in get_config_posix
        File "<string>", line 27, in find_package_name
      Exception: Can not find valid pkg-config name.
      Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

        关于这个报错显示,参考了好几篇博客,都是在说缺少 mysql-devel 库,用 yum -y install mysql-devel,在使用pip3安装就可了。但是实际上并没有什么卵用,不知这里尝试了多少遍,因为当使用yum安装mysql-deve的时候,结果安装的确是这个库,mariadb-devel,跟mysql,并没关系。(大家可自行对比,mysql跟mariadb 的区别)

Package 1:mariadb-devel-5.5.68-1.el7.x86_64 already installed and latest version

问题说明:

1)使用rpm -qa 查看操作系统中是否安装过mysql数据库

[root@d3acd2b8211d /]# rpm -aq | grep mysql
[root@d3acd2b8211d /]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
mariadb-devel-5.5.68-1.el7.x86_64

        使用rpm 命名查看操作系统中存在mariadb数据库,但是不存在mysql,数据库 ,因为mariadb数据库是centos操作系统中自带的,mariadb-devel 是我们用 yum -y install mysql-devel安装的(这就很扯淡),为什么mysql-devel 跟mariadb 有关系。

 2)使用rpm -e 卸载操作系统中的mariadb数据库

[root@d3acd2b8211d /]# rpm -e mariadb-devel-5.5.68-1.el7.x86_64
[root@d3acd2b8211d /]# rpm -e mariadb-libs-5.5.68-1.el7.x86_64

        !!!强调一下,卸载完mariadb-devel mariadb-lis之后,再使用yum 安装mysql-devel 又会重新安装mariadb,不会安装mysql数据库。mysql数据库与mariadb数据库在centos中只能存在一个。

解决方法:

1)完全卸载mariadb

使用 rpm -e 方法卸载mariadb,而且要完全卸载,如果不卸载,安装mysql的时候会报错。

[root@d3acd2b8211d /]# rpm -e mariadb-devel-5.5.68-1.el7.x86_64
[root@d3acd2b8211d /]# rpm -e mariadb-libs-5.5.68-1.el7.x86_64

2)安装mysql-devel

1、从mysql官网下载mysql的数据库的rpm安装的压缩包

 2、将下载好的mysql包上传到服务器上,解压,并安装

        解压后的安装装包有好多个,我们只安装下边标红的四个就可以,再次强调,我们不是安装mysql数据库服务跟mysql的客户端,我们是安装mysqlclient的编译的依赖包。

[root@d3acd2b8211d opt]# tar -xvf mysql-5.7.43-1.el7.x86_64.rpm-bundle.tar       
mysql-community-client-5.7.43-1.el7.x86_64.rpm
mysql-community-common-5.7.43-1.el7.x86_64.rpm
mysql-community-devel-5.7.43-1.el7.x86_64.rpm

mysql-community-embedded-5.7.43-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.43-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.43-1.el7.x86_64.rpm
mysql-community-libs-5.7.43-1.el7.x86_64.rpm 
mysql-community-libs-compat-5.7.43-1.el7.x86_64.rpm 

mysql-community-server-5.7.43-1.el7.x86_64.rpm
mysql-community-test-5.7.43-1.el7.x86_64.rpm

2、使用rpm -ivh packages 安装

        四个rpm包的安装顺序,强调包跟包之间有强依赖关系,顺序一定不能错。下边是正确的安装顺序与安装结果的显示,如果mariadb数据库不卸载,也会安装不成功,请一定要先卸载再安装,谨记!!!

rpm -ivh mysql-community-common-5.7.43-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.43-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.43-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.43-1.el7.x86_64.rpm

 3、查看mysql动态链接库

        当我们安装上边四个包成功后,会在/usr/lib64 目录下创建一个mysql的目录,mysql目录中包含的就是mysqlclient运行时需要的动态链接库,这个mysql目录一定不能删除!!! 否者,即使mysqlclient 安装成功也不能使用,报错就是缺少链接库 文件。

 安装验证

1)安装 mysqlclient库

        pip3 install mysqlclient,安装完之后可以看到在安装的过程把 mysqlclient-2.2.0.tar.gz 给我编译成了一个wheel文件mysqlclient-2.2.0-cp38-cp38-linux_x86_64.whl,这个whl文件是可以在任何地方直接安装的。(但是要注意操作系统跟python的版本是否适用)

[root@d3acd2b8211d opt]# pip3 install mysqlclient
Collecting mysqlclient
  Using cached mysqlclient-2.2.0.tar.gz (89 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: mysqlclient
  Building wheel for mysqlclient (pyproject.toml) ... done
  Created wheel for mysqlclient: filename=mysqlclient-2.2.0-cp38-cp38-linux_x86_64.whl size=121344 sha256=c89876ae62449ecb7c56e3e581c8e6ab8bd09cabb8b242650588e16d2784eb1f
  Stored in directory: /root/.cache/pip/wheels/c6/45/60/65ff711ddb1059e530228ebc5ddf10289427af7bc77850923d
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-2.2.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

2)验证 mysqlclient库

[root@d3acd2b8211d opt]# cat testmysql.py 
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect(host='192.168.109.135', port=3306, user='root', password='test_12345',
                     db='pools', charset="utf8")

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("show tables;")

# 使用 fetchone() 方法获取一条数据
data = cursor.fetchone()
print(data)
[root@d3acd2b8211d opt]# python3 testmysql.py 
('app01_department',)
[root@d3acd2b8211d opt]# 

3)验证结果

        使用pip工具安装的mysqlclient 完全没有报错,而且还给我们编译成了whl文件,在测试的时候也是可以看出mysqlclient连接数据库是没有问题的,查询也是OK的。

注意:在使用.whl 文件在另一个其它操作系统使用pip安装的时候也是没有问题的,但是当测试连接数据库的时候,会出现动态库找不到的问题,这里把/usr/lib64/mysql/*的动态链接库复制到新的操作系统中,目录不变,并创建软连接,文件以当前环境为准。

ln -s /usr/lib64/mysql/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/867698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊51单片机

目录 1.介绍 2.发展 3.应用领域 4.发展前景 1.介绍 51单片机&#xff08;AT89C51&#xff09;是一种常见的8位微控制器&#xff0c;属于Intel MCS-51系列。它是一种低功耗、高性能的单片机&#xff0c;广泛应用于嵌入式系统中。 51单片机具有很多特点和功能&#xff0c;例如…

用js快速生成一个简单的css原子库 例如: .mr-18 .pl-18

第三方css原子库的缺点 比如 tailwindcss&#xff0c;有学习成本最开始写的时候效率可能还没有我们自己手写效率高&#xff0c;需要配置&#xff0c;会有原始样式被覆盖的问题&#xff1b;总之就是一个字重 自己搓的优点 学习成本低灵活不会有副作用 <!DOCTYPE html>…

eclipse 导入项目js报错问题

eclipse 导入项目后会出现项目中的js文件报错&#xff08;红叉&#xff09;&#xff0c;如下图所示&#xff0c;有时候报错的文件很多&#xff0c;需要集中处理。 解决办法&#xff1a; 右键项目名称》Properties》MyEclipse》JavaScript》Include Path&#xff0c;在右侧选择“…

C语言案例 将一个数组逆序输出14

题目&#xff1a;将一个数组逆序输出 程序分析 数组是根据下标进行输出的&#xff0c;因此&#xff0c;我们可以逆向下标顺序输出。 步骤一&#xff1a;定义程序目标 编写C程序&#xff0c;输入数组元素&#xff0c;然后进行逆序输出。 步骤 二&#xff1a;程序设计 整个程序使…

国产航顺HK32F030M: 基于NTC负温度系数的温度计

前言&#xff1a; 家里的一个儿童澡盆附带的温度计坏掉了&#xff0c;拆解后发现这东西做的真垃圾&#xff01;索性自己做一个。拆下了里面的NTC热敏电阻&#xff0c;但是不知道NTC的性能参数&#xff0c;经过测量与查资料后&#xff0c;采用用中位值滤波 、 Steinhart-Hart方…

期权的希腊字母计算及应用

1.前言 期权价格会受到多个因素的影响,如标的资产价格、时间、波动率等,所以引入希腊字母来衡量不同因素对期权价格的影响程度,即Delta、Gamma、Vega、Theta和Rho,从而更综合的研究期权的影响因素。对于单独希腊值的作用,Delta经常被用做计算期权交易杠杆的指标、期权和期…

Linux系统下Redis3.2集群

本节主要学习reids主从复制的概念&#xff0c;作用&#xff0c;缺点&#xff0c;流程&#xff0c;搭建&#xff0c;验证&#xff0c;reids哨兵模式的概念&#xff0c;作用&#xff0c;缺点&#xff0c;结构&#xff0c;搭建&#xff0c;验证等。 文章目录 一、redis主从复制 …

【网络编程(三)】Netty入门到实战这一篇就够了

Netty入门到实战 NettyNetty 核心组件和流程分析数据流转的底层核心ByteBuf 原理分析Netty 解决半包、粘包问题Netty 实现心跳检查机制 Netty NIO 是一种 I/O 模型&#xff0c;netty 是基于 NIO 开发出来的一款异步事件驱动框架&#xff0c;它是一个通用的网络应用程序框架。n…

Transformer(二)(VIT,TNT)(基于视觉CV)

目录 1.视觉中的Attention 2.VIT框架&#xff08;图像分类&#xff0c;不需要decoder&#xff09; 2.1整体框架 2.2.CNN和Transformer遇到的问题 2.3.1CNN 2.3.2Transformer 2.3.3二者对比 2.4.公式理解 3TNT 参考文献 1.视觉中的Attention 对于人类而言看到一幅图可以立…

面向对象编程的特征:抽象、封装、继承和多态

文章目录 1. 抽象和封装&#xff1a;揭示事物本质&#xff0c;隐藏细节抽象封装 2. 继承&#xff1a;代码复用&#xff0c;提高可维护性3. 多态&#xff1a;灵活应对不同情境总结 面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;是一种现代的…

感应电机的谐波分析 - Part2-1理论推演

金属腔体生成电磁波后&#xff0c;这些电磁波会像黑体辐射一样无论反射多少次&#xff0c;终将会被壳体吸收&#xff1f; 根据热力学的基本原理&#xff0c;当金属腔体内的电磁波频率和温度满足一定条件时&#xff0c;电磁波会像黑体辐射一样被吸收。这种现象被称为热平衡。一旦…

mybatis(上)

mybatis&#xff1a;原来是apache的一个开源项目&#xff0c;叫ibatis。2010年转移谷歌&#xff0c;从3.0开始改名为mybatis mybatis是一款优秀的持久层框架&#xff0c;是对jdbc功能进行轻量级的封装&#xff0c;提供了统一的数据库信息配置统一放在一个xml文件中&#xff0c;…

安卓改透明屏有哪些方法和步骤?壁纸、主题、软件

安卓改透明屏是指将安卓手机的屏幕背景变为透明&#xff0c;使得手机的背景图像或者壁纸能够透过屏幕显示出来。 这样的改变可以让手机的界面更加个性化&#xff0c;也能够增加手机的美观度。 要实现安卓手机的透明屏&#xff0c;可以通过以下几种方法&#xff1a; 1. 使用透…

Windows端口占用问题

Windows端口占用问题 1、检查端口是否已被占用&#xff08;端口举例&#xff1a;10000&#xff09; 【WindowsR】打开【运行】窗口 点击【确定】打开【cmd】窗口 输入【下方命令】&#xff0c;然后【回车】 netstat -aon | find "10000"可以看到端口【10000】已…

Android系统-进程-Binder

目录 引言&#xff1a; 一次拷贝 Binder一次通信过程 应用启动中的binder交互 C/S模式&#xff1a; Binder COMMAND BWR数据结构&#xff1a; 引言&#xff1a; Android的binder是从openbinder发展过来的。包括了binder驱动&#xff0c;Native层&#xff0c;Java层。用…

Linux黑客渗透测试揭秘:探索安全边界的挑战与应对

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 前言 随着信息技术的迅…

uniapp 获取 view 的宽度、高度以及上下左右左边界位置

<view class"cont-box"></view> /* 获取节点信息的对象 */ getElementRect() {const query uni.createSelectorQuery().in(this);query.select(".cont-box").boundingClientRect(res > {console.log(res);console.log(res.height); // 10…

高级进阶多线程——多任务处理、线程状态(生命周期)、三种创建多线程的方式

Java多线程 Java中的多线程是一个同时执行多个线程的进程。线程是一个轻量级的子进程&#xff0c;是最小的处理单元。多进程和多线程都用于实现多任务处理。 但是&#xff0c;一般使用多线程而不是多进程&#xff0c;这是因为线程使用共享内存区域。它们不分配单独的内存区域…

勘探开发人工智能技术:机器学习(6)

0 提纲 7.1 循环神经网络RNN 7.2 LSTM 7.3 Transformer 7.4 U-Net 1 循环神经网络RNN 把上一时刻的输出作为下一时刻的输入之一. 1.1 全连接神经网络的缺点 现在的任务是要利用如下语料来给apple打标签&#xff1a; 第一句话&#xff1a;I like eating apple!(我喜欢吃苹…

优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具

文章目录 优秀的 Modbus 从站&#xff08;从机、服务端&#xff09;仿真器、串口调试工具主要功能软件截图 优秀的 Modbus 从站&#xff08;从机、服务端&#xff09;仿真器、串口调试工具 官网下载地址&#xff1a;http://www.redisant.cn/mse 主要功能 支持多种Modbus协议…