记一次安装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

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值