记一次安装mysqlclient采坑:安装2.0.2最新版出错
Posted zeaning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次安装mysqlclient采坑:安装2.0.2最新版出错相关的知识,希望对你有一定的参考价值。
后注:心想这装不上的问题,官方肯定要修复呀。过了两三天,果然官方修复了,并且新版本没这个问题。
买了台腾讯的lighthouse服务器,部署一套django+uwsgi环境走起。
然后运行项目的时候,提示:
django.core.exceptions.ImproperlyConfigured: Error loading mysqldb module.
Did you install mysqlclient?
意思是没有安装:mysqlclient
pip install mysqlclient
走起,结果报错了,竟然报错了!
...
MySQLdb/_mysql.c: In function ‘_mysql_row_to_dict_cached’:
MySQLdb/_mysql.c:1340:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (unsigned int i=0; i<n; i++)
^
MySQLdb/_mysql.c:1340:5: note: use option -std=c99 or -std=gnu99 to compile your code
error: command 'gcc' failed with exit status 1
排查gcc问题,补上一堆的库:
sudo yum -y install gcc gcc-c++ kernel-devel
sudo yum -y install python-devel libxslt-devel libffi-devel openssl-devel
pip install cryptography
还是报这个错误。我win和另外一台centos都是直接装的,不知道这个服务器啥情况。
心想,装不上,我换个方案行不?用PyMySQL库:
pip3 install PyMySQL
在django项目settings.py所在文件夹的__init__.py文件里添加:
import pymysql
pymysql.install_as_MySQLdb()
运行python manage.py runserver,报版本过低:
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.version)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
找了下,要改django的源码:
找到Python安装路劲下的/Users/MAC/env/MxShop/lib/python3.6/site-packages/django/db/backends/mysql/base.py文件
将文件中的如下代码注释
#if version < (1, 3, 3): # raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
教程见: https://www.cnblogs.com/superhin/p/12341697.html
想了下,要改源码,还是算了。
再尝试下吧,不是报 error: ‘for’ loop initial declarations are only allowed in C99 mode 问题吗,查一下C99啥情况:
说是因为在gcc中直接在for循环中初始化了增量,因为gcc基于c89标准,换成C99标准才可以:
gcc src.c -std=c99 -o src
试了下,命令执行不了。
突然灵机一动,既然是版本的问题,是不是可以通过版本解决?试一下安装个低版本看看?
pip install mysqlclient==1.4.3
成了!没报错。然后我看我另外的主机安装的是2.0.1版本,再更新一下:
pip install mysqlclient==2.0.1
也不报错!
总结:
看了下,最新版的是mysqlclient==2.0.2,应该是最新版的安装代码里面,引入了新的代码,触发了C89不能在for循环里面初始化变量的问题。
就因为这个问题,排查了一两个小时有点坑。
结论:
pip install mysqlclient 安装最新版的mysqlclient,会报错。
解决方案,安装次新版:
pip install mysqlclient==2.0.1
以上是关于记一次安装mysqlclient采坑:安装2.0.2最新版出错的主要内容,如果未能解决你的问题,请参考以下文章
Linux上使用pip 安装mysqlclient,pip install mysqlclient==2.0.1遇到的问题:OSError: mysql_config not found