记一次安装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最新版出错的主要内容,如果未能解决你的问题,请参考以下文章

记一次直播录屏

yum 记一次安装时的报错

Linux上使用pip 安装mysqlclient,pip install mysqlclient==2.0.1遇到的问题:OSError: mysql_config not found

Linux-ftp服务搭建

无法在 ubuntu 上使用 pip 安装 mysqlclient [重复]

zabbix记一次简单的部署包方式安装一次过