阿毛
It's me !
想你所想

解决pip install MySQLdb时“fatal error: 'my_config.h' file not found”异常

7月刚换的工作,试用期期间,要做的事情比较多,一直没有精力总结。最近稍微轻松些,把今天遇到的赶紧总结下。之后会把上个月拉下的内容,补充下。
以上全是废话。。。

本文通过mac实践的,所以也适用于其他linux版本。对于windows,操作可能不相同,但解决的思路大同小异,可做参考。

今天在准备利用古老的MySQLdb完成python对mysql api的操作,pip install时,一直报如下错误:
fatal error: 'my_config.h' file not found

  building '_mysql' extension
  creating build/temp.macosx-10.13-x86_64-2.7
  clang -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -Dversion_info=(1,2,5,'final',1) -D__version__=1.2.5 -I/usr/local/Cellar/mysql/8.0.19_1/include/mysql -I/Users/humh/.pyenv/versions/2.7.12/envs/confcv/include/python2.7 -c _mysql.c -o build/temp.macosx-10.13-x86_64-2.7/_mysql.o
  _mysql.c:44:10: fatal error: 'my_config.h' file not found
  #include "my_config.h"
           ^~~~~~~~~~~~~
  1 error generated.
  error: command 'clang' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for MySQL-python
  Running setup.py clean for MySQL-python
Failed to build MySQL-python
Installing collected packages: MySQL-python
    Running setup.py install for MySQL-python ... error
    ERROR: Command errored out with exit status 1:

文件缺失?? 找了一通度娘后,发现解决方案都是brew install mysql-connector-c或者export LDFLAGS等等,如https://stackoverflow.com/questions/50864438/mac-pip-install-mysql-python-unsuccessful

这里因为我使用的mac,同时我已经brew install mysql了,还需要mysql 及client,所以没有再单独安装mysql-connector-c。其他解决办法也试了并没有用。

于是,我去mysql doc中查了下“my_config.h”是怎么个情况,在这里(https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-2.html)找到了答案。原来,在8.0的mysql 客户端中,已经去掉了“my_config.h”。

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-2.png

无意间,也看到了这篇文章(https://www.jianshu.com/p/71305f4d3536)从中得到了启发。既然是文件缺失,那么我可以将缺失文件补全,然后通过对依赖包源码本地编译进行安装,而不直接pip install,如下是成功的解决办法:
注:下文中“MySQL-python”等同于“MySQLdb”

1、补全缺失的my_config.h

从gitee上找到了一个大佬提供的头文件https://gitee.com/niukey/acl/blob/master/include/mysql/my_config.h,down下来。这里因为我的mysql是通过brew安装的,所有bin命令都是通过如软链的形式,所以这里我也是将“my_config.h”软链至bin下:

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-3.png

这里因为使用mac iterm,所以restart session一下。

2、从pip源,下载MySQL-python源码

https://pypi.org/project/MySQL-python/1.2.5/#files

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22.png

选择zip,将下载后的zip解压即可,解压后大致内容:

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-1.png

3、修改“_mysql.c”中的“my_config.h” 配置

根据报错信息,可以很清楚的知道,错误发生在“_mysql.c”文件的第44行,我们找到错误位置:

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-4.png

将此处的“my_config.h”换成你真实my_config.h 命令路径,这里换成了第一步软链的位置:/usr/local/bin/my_config.h,保存即可。

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-5.png

4、对依赖包源码进行编译与安装

编译构建:~/.pyenv/versions/taskcv/bin/python2.7 setup.py build (python路径换成你对应python路径即可)

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-6.png

最终build后的内容,你会在源码build 路径下看到

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-7.png

安装:~/.pyenv/versions/taskcv/bin/python2.7 setup.py install(python路径换成你对应python路径即可)

https://file.blog.humh.cn/2020/08/d2b5ca33bd970f64a6301fa75ae2eb22-8.png

你会在python lib site-packages 中发现MySQL-python的依赖包。

5、测试

可以通过python console中,输入import MySQLdb 回车,看是否会报“No model”的错误,无错则成功;或者直接在ide中import测试。

# # #
首页      code      Python      解决pip install MySQLdb时“fatal error: 'my_config.h' file not found”异常

humh

文章作者

站长本人,一个憨批!

发表评论

textsms
account_circle
email

想你所想

解决pip install MySQLdb时“fatal error: 'my_config.h' file not found”异常
7月刚换的工作,试用期期间,要做的事情比较多,一直没有精力总结。最近稍微轻松些,把今天遇到的赶紧总结下。之后会把上个月拉下的内容,补充下。以上全是废话。。。 本文通过mac实践…
扫描二维码继续阅读
2020-08-07