一次安装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受到的启发 的相关文章

  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 卷曲选项 -:未知

    我运行此命令在 ubuntu 18 04 上安装更新版本的 nodejs curl sL https deb nodesource com setup 12 x sudo E bash 我收到错误 curl 选项 未知 我在多个系统上尝试过
  • 将 Python Pandas DataFrame 写入 Word 文档

    我正在努力创建一个使用 Pandas DataFrames 的 Python 生成的报告 目前我正在使用DataFrame to string 方法 但是 这会作为字符串写入文件 有没有办法让我实现这一目标 同时将其保留为表格 以便我可以使
  • 类型错误:“datetime.datetime”和“str”的实例之间不支持“>”

    我是 python 日期和时间类型的新手 我有一个日期值 date 2018 11 10 10 55 31 00 00 我需要检查该日期值是否超过 90 天 我试过 from datetime import datetime from da
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • 使用pathlib获取主目录

    翻看新的pathlib在 Python 3 4 中 我注意到没有任何简单的方法来获取用户的主目录 我能想到的获取用户主目录的唯一方法是使用旧的os path像这样的库 import pathlib from os import path p
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • Django 多对多关系(类别)

    我的目标是向我的 Post 模型添加类别 我希望以后能够按不同类别 有时是多个类别 查询所有帖子 模型 py class Category models Model categories 1 red 2 blue 3 black title
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • Py2exe - Pmw WindowsError:[错误 3]

    我正在尝试使用 Py2exe 构建独立的可执行文件 我已经导入了 Pmw 类 当我运行独立可执行文件时 出现以下错误 Traceback most recent call last File py line 9 in
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 如何用正则表达式替换多个匹配/组?

    通常我们会编写以下内容来替换一场比赛 namesRegex re compile r is life re I replaced namesRegex sub r butter There is no life in the void pr
  • 为什么将模块级代码放入函数中然后调用该函数在Python中速度更快?

    在亚历克斯 马尔泰利的回应中使 Python 脚本面向对象 https stackoverflow com questions 1813117 making a python script object oriented 他提到在 Pyth
  • 是否可以在Python中将日+月(不是年)与当前日+月进行比较?

    我正在获取 5 月 10 日 格式的数据 我试图弄清楚它是今年还是明年 该日期仅一年 因此 5 月 10 日表示 2015 年 5 月 10 日 而 5 月 20 日表示 2014 年 5 月 20 日 为此 我想将字符串转换为日期格式并进
  • Python 2.7 缩进错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题是由拼写错误或无法再重现的问题引起的 虽然类似的问题可能是on topic help on topic在这里 这个问题的解决方式不
  • 是否可以使用 Anaconda 包作为 Google Cloud Functions 的依赖项?

    我正在使用 Python 运行时编写 Google Cloud Function 我需要包含一些无法使用的依赖项pip 如文档中所述here https cloud google com functions docs writing spe
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 如何使用 Python/Django 在 Facebook 中获取(和使用)扩展权限

    我正在尝试编写一个简单的应用程序 让用户授予我的代码写入其页面的 Facebook 流的权限 据我了解 它应该很简单 让用户单击一个按钮 启动一个弹出窗口 其中包含我的 Facebook 应用程序中的页面 在该页面中 他们单击授予的内容流发
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA

随机推荐

  • 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 就有了以下的