Debian 9虚拟环境安装MySQL-python==1.2.5失败求助
解决Debian 9下安装MySQL-python==1.2.5的编译错误
我之前在Debian 9上安装MySQL-python 1.2.5时也碰到过一模一样的问题!根源在于Debian 9默认带的MariaDB 10.1版本已经移除了MYSQL.reconnect这个结构体成员,而老版本的MySQL-python 1.2.5还在直接引用它,导致编译失败。下面是我亲测有效的解决步骤:
1. 先安装编译依赖
首先确保你有编译所需的所有系统包,执行以下命令:
sudo apt-get update && sudo apt-get install python-dev libmariadbclient-dev gcc
python-dev提供Python 2.7的开发头文件,编译Python扩展时必须用到libmariadbclient-dev是MariaDB的开发库,包含编译MySQL-python需要的头文件和链接库gcc是C语言编译器,用来编译MySQL-python的C扩展部分
2. 修复源码中的兼容性问题
因为原包的代码不兼容新版MariaDB,我们需要手动修改源码后再安装:
- 先下载MySQL-python 1.2.5的源码包:
pip download MySQL-python==1.2.5 unzip MySQL-python-1.2.5.zip cd MySQL-python-1.2.5 - 打开
_mysql.c文件,找到_mysql_ConnectionObject_ping函数中的这一行:if ( reconnect != -1 ) self->connection.reconnect = reconnect; - 将其替换为使用
mysql_options的方式(新版MariaDB推荐的设置自动重连的方法):if ( reconnect != -1 ) { unsigned int flag = reconnect ? 1 : 0; mysql_options(self->connection, MYSQL_OPT_RECONNECT, &flag); } - 最后手动安装修改后的包:
python setup.py install
3. 备选方案:替换为兼容的分支包
如果你的遗留Django应用可以兼容的话,更省心的方式是用mysqlclient——它是MySQL-python的官方分支,完全兼容Python 2.7和新版MariaDB,安装命令:
pip install mysqlclient
大部分情况下,Django应用不需要修改代码就能直接替换MySQL-python为mysqlclient,而且能避免老版本的各种兼容性问题。
额外提醒
虽然上面的方法能解决当前问题,但Python 2.7已经停止维护很久了,长期来看还是建议逐步将你的遗留Django应用迁移到Python 3版本,这样能避免更多类似的依赖兼容性问题。
内容的提问来源于stack exchange,提问作者Milkyway
相关产品推荐
相关产品推荐

