最近升级了生产力,换了m3的mbp,迁移项目的时候遇到的一系列python mysqlclient的环境问题,这里总结记录一下。
- 设备:Macbook Pro m3
- 系统:macos Sonoma 14.6
- 最终成功的python版本:Python3.9.1
- 最终系统环境下mysql-client版本:8.0.39
正式安装流程
python安装
关于Python版本
我原项目运行在之前环境是3.6版本,适配mysqlclient 1.4.6版本完美运行。在新环境下,先后尝试了3.6,3.12,3.7.3.8等各种版本,配合对应的各种mysqlclient先后遇到各种报错,要么无法正常安装mysqlclient,要么启动项目时出现各种问题,之后细说。
重点来了忙活了半天才查到,python官方在3.9.1 已经后续版本原生支持了m系列芯片的arm架构,这也是我认为导致我们明明安装了所有需要的环境依赖还是无法正常启动的主要原因。,然而中文网上能找到的类似解决方案都是针对老intel芯片环境下的报错处理
所以想要原生支持M系列芯片又考虑高版本带来的兼容性问题,我首选了Python3.9.1,采用官网安装包傻瓜式安装的方式
官网:python.org
根据芯片类型别装错版本
- 官网下载,打开安装包傻瓜式安装
- 正常安装完运行终端,
python3 -V
,安装成功且环境变量正常应该能正常显示版本号Python 3.9.1rc1
,且在/usr/local/bin
目录下存在python相关文件
安装python很简单,只要版本对了一点问题没有
mysqlclient安装
关于mysql-client
根据mysqlclient官方文档说明,我们可以选择在本地通过brew安装mysql或者,或者mysql-client的方式,这里我推荐直接使用mysql-client
重点又来了本篇发布时间为24年10月,这个时候
brew install mysql-client
默认安装9版本,这里我们一定一定要指定8版本
brew install mysql-client@8.0
,由于官网文档的提示,9版本弃用了一个重要功能,导致安装了这个版本后又安装了mysqlclient,即使成功安装了,引入import MySQLdb
的时候还是会报一个mysql_native_password
相关错误
可以参考mysqlclient文档
首选确保你的macos已经安装配置好了brew,以及配置了国内源。
其中通过mysql安装的方式就不讲了,经过实践遇到的问题比直接安装mysql-client还多一点
shell
# 安装pkg-config
brew install pkg-config
# 安装 mysql-client
brew install mysql-client@8.0
# 添加环境变量 在 ~/.zshrc 中添加下面这行
export PKG_CONFIG_PATH="$(brew --prefix)/opt/mysql-client@8.0/lib/pkgconfig"
# 保存后 source ~/.zshrc 刷新环境变量
# 通过 printenv 可以查看确认当前环境变量
接下来可以正常安装mysqlclient,这里我安装的是mysqlclient 2.2.0版本
shell
# 2.0.0 以上版本需要python3.8及以上才能兼容,这里我之前使用的老版本1.4.6已经无法完美适配了,好在对当前项目没有影响
pip3 install mysqlclient==2.2.0
如果正常安装完成,没有报错,进入当前python运行环境测试
如果能正常引入MySQLdb而没有报错,那么基本上算上顺利完成了。可以尝试在虚拟环境安装完依赖启动项目试试
遇到的一些报错
由于在解决问题的时候没有记录,这里只展示部分问题
MySQL Error: name '_mysql' is not defined : 这是在安装完成mysqlclient后启动项目遇到的,基本是由于macos中安装的mysql相关问题,这个试试在python运行环境中直接引入MySQLdb一定也是报错的。
Did you install mysqlclient? : 这个问题同上,即使pip list 能看到我们刚成功安装的mysqlclient,还是会提示这个错误。这还和mysqlclient的版本可能也有一些关系,但是即使版本对了可能还是会遇到上诉问题,重点还是要把握pyhton以及mysql-client版本,
mysqlclient安装失败 : pip安装过程中的报错,一般是缺少环境,在mysql-client和pkg-config安装好后确认环境变量也是无异常,还可以根据报错信息看看是不是缺少了gcc,zstd之类的包后续待补充