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://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下:
这里因为使用mac iterm,所以restart session一下。
2、从pip源,下载MySQL-python源码
https://pypi.org/project/MySQL-python/1.2.5/#files
选择zip,将下载后的zip解压即可,解压后大致内容:
3、修改“_mysql.c”中的“my_config.h” 配置
根据报错信息,可以很清楚的知道,错误发生在“_mysql.c”文件的第44行,我们找到错误位置:
将此处的“my_config.h”换成你真实my_config.h 命令路径,这里换成了第一步软链的位置:/usr/local/bin/my_config.h,保存即可。
4、对依赖包源码进行编译与安装
编译构建:~/.pyenv/versions/taskcv/bin/python2.7 setup.py build
(python路径换成你对应python路径即可)
最终build后的内容,你会在源码build 路径下看到
安装:~/.pyenv/versions/taskcv/bin/python2.7 setup.py install
(python路径换成你对应python路径即可)
你会在python lib site-packages 中发现MySQL-python的依赖包。
5、测试
可以通过python console中,输入import MySQLdb
回车,看是否会报“No model”的错误,无错则成功;或者直接在ide中import测试。
发表评论