一次安装Python插件mysqlclient受到的启发

2023-11-18

首先,我也是Python的初学者,环境是ubuntu22.04+pycharm,都安装好了以后,我打开了一个原来编辑过的项目,在新环境中提示没有安装mysqlclient,于是我就pip install mysqlclient,就有了以下的报错信息:

$ pip install mysqlclient
Defaulting to user installation because normal site-packages is not writeable
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
  ╰─> [27 lines of output]

      /bin/sh: 1: pkg-config: not found
      /bin/sh: 1: pkg-config: not found
      Trying pkg-config --exists mysqlclient
      Command 'pkg-config --exists mysqlclient' returned non-zero exit status 127.
      Trying pkg-config --exists mariadb
      Command 'pkg-config --exists mariadb' returned non-zero exit status 127.
      Traceback (most recent call last):
        File "/home/jarry/.local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/home/jarry/.local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/jarry/.local/lib/python3.11/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-xnpvipsh/overlay/local/lib/python3.11/dist-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-xnpvipsh/overlay/local/lib/python3.11/dist-packages/setuptools/build_meta.py", line 323, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-xnpvipsh/overlay/local/lib/python3.11/dist-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.

可以看出其中有两处标红的很明显的错误,第一处错误有明确的提示,缺少pkg-config,所以我就安装:

$ sudo apt-get install pkg-config
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
下列【新】软件包将被安装:
  pkg-config
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。
需要下载 48.2 kB 的归档。
解压缩后会消耗 134 kB 的额外空间。
获取:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 pkg-config amd64 0.29.2-1ubuntu3 [48.2 kB]
已下载 48.2 kB,耗时 1秒 (40.3 kB/s)  
正在选中未选择的软件包 pkg-config。
(正在读取数据库 ... 系统当前共安装有 230144 个文件和目录。)
准备解压 .../pkg-config_0.29.2-1ubuntu3_amd64.deb  ...
正在解压 pkg-config (0.29.2-1ubuntu3) ...
正在设置 pkg-config (0.29.2-1ubuntu3) ...
正在处理用于 man-db (2.10.2-1) 的触发器 ...

然后再次pip install mysqlclient,第一处的错误消失了,至于第二个地方note: This error originates from a subprocess, and is likely not a problem with pip.这里提示很模糊,就说了可能是子进程的问题,并且可能不是pip的问题,以前在Linux中也遇到过类似的事情,多数由于依赖问题导致,但是具体是什么的依赖,没有描述,这就需要思考了。

我们要安装mysqlclient,有可能是它的依赖包,但前面还有一句Building wheel for mysqlclient (pyproject.toml) ... error,所以也有可能是wheel的依赖包,也有可能是一些很基础的依赖包,比如gcc或者什么的,查资料吧!

于是:

sudo apt-get install default-libmysqlclient-dev build-essential

结果说我的build-essential是最新的,给我安装了default-libmysqlclient-dev,但是问题没有解决,然后继续找...

查了mysqlclient的依赖包,查了python的依赖包,过程非常艰苦,忽然我想起来一个问题,我的系统中有两个版本的Python,3.10和3.11,那些依赖包虽然都是最新的,但是是不是跟我Pycharm使用的Python3.11不合适呢?于是,知道我安装了libpython3.11-dev后,问题解决了:

$ sudo apt-get install libpython3.11-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
将会同时安装下列软件:
  libpython3.11
下列【新】软件包将被安装:
  libpython3.11 libpython3.11-dev
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。
需要下载 7,521 kB 的归档。
解压缩后会消耗 33.3 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy/main amd64 libpython3.11 amd64 3.11.4-1+jammy1 [2,213 kB]
获取:2 https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy/main amd64 libpython3.11-dev amd64 3.11.4-1+jammy1 [5,309 kB]
已下载 7,521 kB,耗时 17秒 (435 kB/s)                                          
正在选中未选择的软件包 libpython3.11:amd64。
(正在读取数据库 ... 系统当前共安装有 230163 个文件和目录。)
准备解压 .../libpython3.11_3.11.4-1+jammy1_amd64.deb  ...
正在解压 libpython3.11:amd64 (3.11.4-1+jammy1) ...
正在选中未选择的软件包 libpython3.11-dev:amd64。
准备解压 .../libpython3.11-dev_3.11.4-1+jammy1_amd64.deb  ...
正在解压 libpython3.11-dev:amd64 (3.11.4-1+jammy1) ...
正在设置 libpython3.11:amd64 (3.11.4-1+jammy1) ...
正在设置 libpython3.11-dev:amd64 (3.11.4-1+jammy1) ...
正在处理用于 man-db (2.10.2-1) 的触发器 ...
$ pip install mysqlclient
Defaulting to user installation because normal site-packages is not writeable
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-cp311-cp311-linux_x86_64.whl size=125939 sha256=39ad4b956ea2f3e9b93b48835cb7be9df88063c2a8439eb99af6810a18ceab89
  Stored in directory: /home/jarry/.cache/pip/wheels/a4/97/41/1e55ebbb29ce69d9008782f457658f48755b861fa145538ca0
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-2.2.0

还是版本问题,还是版本问题,还是版本问题!

重要的事情要说3遍,Linux环境,有很多依赖问题都来自于版本问题,这也是常态,玩开源,一定会遇到这些的,所以通过这个过程,想给各位初学者(包括Linux的和Python的等等)分享一点心得,就是开源的软件环境,我们在学习和使用过程中,一定要保持好下面几条良好的习惯:

1、遇到问题,首先自己先理解一些问题产生的原因,尽量自己解决;

        Linux给我们带来了开源免费的便利,也带来了众多爱好者一同开发使用的诟病,就是版本问题控制的太灵活,大概这也是Linux至今也没有被主流应用的原因吧,除非像华为这样的大厂决心做个封装好的平台来解决这种问题,不然,我们永远会遇到这类问题,但是,不要慌,Linux同时给我们带来了非常方便(远超Windows系统的)控制台反馈机制,这里面很多东西写的很清楚,不要因为都是英文就懒得去读,首先这里面的英文很简单,其次,英文是我们技术人员一段时间内都没办法越过去的(别跟我说什么中文编程语言这类的话),这东西本身就是用英文开发的,并且,专业词汇没有多少,要去掌握!

2、Linux系统最多遇到的问题,就是依赖和版本,多思考;

        资料很多,去互联网上查可能会把头看晕,尤其是可爱的度娘搜索的精度,不敢恭维,直接把错误信息复制粘贴很可能查到的都是近似结果,所以,先思考,根据你自己读到的信息思考,那我遇到的这个例子,你如果直接搜索Getting requirements to build wheel did not run successfully会搜出来很多类似结果,有安装AAAA出现的,有安装BBBB出现的,有安装CCCC出现的,可能忙活半天都没有你想要的结果,所以,我是考虑我的环境中,有可能出现谁的依赖有问题,然后去搜索它们的依赖包都有什么,这样解决问题,快速精准!

3、学会提问,自己实在解决不掉的,到专业的交流平台准确的提问;

        如果自己实在解决不掉,那就学会怎么提问,提问时候最好先描述自己的环境(系统名称、系统版本、软件名称、软件版本、工具名称、工具版本等等),然后提出遇到的问题,附带上自己环境反馈的错误信息,并且描述自己想达到的目的,这四个要素是否齐全以及准确,对于你得到帮助的速度和准确程度都有很大影响,学会提问,不要一两句话放在那里等人给你解决,这里没有商业客服人员为你服务!

希望我这些心得会帮助到爱折腾,能捣鼓的初学者一些,那我也欣慰了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一次安装Python插件mysqlclient受到的启发 的相关文章

随机推荐

  • libcurl库安装心得

    一 libcurl简介 libcurl是一个跨平台的网络协议库 支持http https ftp gopher telnet dict file 和ldap 协议 libcurl同样支持HTTPS证书授权 HTTP POST HTTP PU
  • JSON工具类

    在实际开发中通服都是使用JSON格式数据 那么如何跟JSON打交道呢 下面就写一些JSON的常用转换工具 以及JSON数据提取 目录 阿里的FastJSON JSONObject类 JSON类 JSONArray JSONPath Json
  • 分子对接教程

    TCGA GEO 文献阅读 数据库 理论知识 R语言 Bioconductor 服务器与Linux 接前文 分子对接教程 1 软件安装准备 分子对接教程 2 选择合适的蛋白受体 分子对接教程 3 配体分子文件格式转换 分子对接教程 4 蛋白
  • QT 中文版信息提示框

    引言 在QT设计UI程序过程中 整套系统都是中文版本 然而信息提示默认只有中文 难免有点小纠结 这里针对QMessageBox稍微做了一点点改进 使其支持完美的中文提示框 调用方式非常简单 只需要将QMessageBox调用地方 改为QSh
  • 专家PID

    专家PID 专家控制 专家控制是模拟人类专家控制的方式 它具有大量的专门知识和经验 和专家控制一样不需要知道对象的模型的情况下 对系统进行控制 专家控制的基本结构 和人类专家控制一样 知识库越是丰富 推理机越是精确 控制效果也就越好 不同的
  • 数据结构C++ 栈Stack求值算法

    来自邓俊辉老师的数据结构 C 版 第95页 readNumber函数 可读整数和小数 注意 下列代码是直接用C 内部写好的stack实现的 而不是书中给出的stack模板 发现更简洁的readNumber函数 float readNumbe
  • 使用Vue解决跨域问题

    如果你是一个Web前端工程师 那么跨域这个问题肯定是绕不开的 1 创建 vue config js 设置 devServer 属性 module exports devServer webpack dev server配置 host loc
  • ECS共享型s6和ECS突发性能型t6的区别选择哪个好?

    WP建站 一个专注于wordpress学习的 关注他 2 人赞同了该文章 这两个类型的阿里云ecs服务器的话 一般在这两个中二选一的话我们建议优先选择ECS共享型s6 我们简单的来说说他们的一些区别和特点吧 首先我们要知道的是他们都是独立的
  • 线性代数-----行列式的性质

    行列式的性质 设 D a 11
  • cosmos测试网络结点搭建完整流程

    第一步 下载golang并安装 配置环境变量 wget https dl google com go go1 13 8 linux amd64 tar gz tar C usr local xzf go VERSION OS ARCH ta
  • CSDN周赛66期图文题解 - 路灯亮度 & 池塘水量

    本期非编程题考察更多是对原书的阅读理解 可能还是因为自己理解不够 翻了半天书 还是错了两道 失之我命 不多废话 本期编程题比较符合我的胃口 有陷阱 有技巧 窃以为是最近不少期里比较有意思的中等难度的题目了 美中不足的是两道题都没有给出数据范
  • 读写权限详解

    本篇博客主要通过三个问题来理清C C 中的读写权限问题 const变量可以赋值给非const引用吗 const变量的地址可以赋值给非const指针吗 const普通变量可以给非const普通变量赋值吗 在此之前 我们得先明白读写权限的一个基
  • 利用原始socket简单实现FTP的客户端和服务器端程序

    1 设计目的 本设计旨在利用原始socket简单实现FTP File Transfer Protocol 文件传输协议 的客户端和服务器端程序 能够实现get put pwd dir cd等基本交互命令 2 具体要求 用socket 编程接
  • C# 去掉图片多余白色部分

  • AOI的实际应用

    使用AOI检测LED固晶焊线的支架产品 产品结构 使用远心光学镜头 高分辨率 高景深 低畸变以及独有的平行光设计等 被测元件清晰成像 且无斜视 保证不良检出 1 缺陷检测原理 通过模板匹配法 这是一种基本的识别方法 研究某一特定对象物的图案
  • Selenium启动Chrome时配置选项

    Selenium操作浏览器是不加载任何配置的 网上找了半天 关于Firefox加载配置的多点 Chrome资料很少 下面是关于加载Chrome配置的方法 一 加载所有Chrome配置 用Chrome地址栏输入chrome version 查
  • 数组转换成List集合

    对于给定的如下数组 如何转换成List集合 String array a b c 参考stackoverflow总结如下几种写法 1 使用原生方式 拆分数组 添加到List List
  • 傻瓜式操作 之 git分支(合代码--拉代码)

    刚刚入职的我 差点把人家分支给搞坏 呜呜呜太刺激了叭 之前学到 git 的相关知识的时候 都有一种恐惧心理 所以每次往 master 上面合代码的时候都让大佬帮我操作 前几天一位好心人给我了一套 git 的流程 现在玩分支简直是如鱼得水 哈
  • 一个无敌删除的命令,所有的流氓软件及顽固程序等都可以轻松的删除

    教你一个无敌删除的命令 所有的流氓软件及顽固程序等都可以轻松的删除 方法非常的简单 桌面右键 新建 文本文档 双击桌面的这个新建的文本文档 把下面的命令复制后粘贴进去 写入下列命令 DEL F A Q 1 RD S Q 1 文件 另存为 统
  • 一次安装Python插件mysqlclient受到的启发

    首先 我也是Python的初学者 环境是ubuntu22 04 pycharm 都安装好了以后 我打开了一个原来编辑过的项目 在新环境中提示没有安装mysqlclient 于是我就pip install mysqlclient 就有了以下的