报错信息:
Traceback (most recent call last):
File "/Users/fancy-lee/dev-workspace/python/venv4archery/lib/python3.9/site-packages/MySQLdb/__init__.py", line 18, in <module>
from . import _mysql
ImportError: dlopen(/Users/fancy-lee/dev-workspace/python/venv4archery/lib/python3.9/site-packages/MySQLdb/_mysql.cpython-39-darwin.so, 0x0002): Library not loaded: @rpath/libmysqlclient.21.dylib
Referenced from: <38FD5A28-A408-3989-A786-21A512CCFD61> /Users/fancy-lee/dev-workspace/python/venv4archery/lib/python3.9/site-packages/MySQLdb/_mysql.cpython-39-darwin.so
Reason: tried: '/System/Volumes/Preboot/Cryptexes/OS@rpath/libmysqlclient.21.dylib' (no such file), '/usr/lib/libmysqlclient.21.dylib' (no such file, not in dyld cache)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Users/fancy-lee/dev-workspace/python/venv4archery/lib/python3.9/site-packages/MySQLdb/__init__.py", line 24, in <module>
version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
处理办法:
1、进入python3安装目标下的/lib/python3.9/site-packages/MySQLdb目录,找到类似_mysql.cpython-39-darwin.so这个文件
2、然后执行命令查找libmysqlclient.21.dylib这个文件所在的位置
find / -name "libmysqlclient.21.dylib" 2>&1|grep -v "Permission denied\|not permitted\|Not a directory"
3、执行以下命令:
sudo install_name_tool -change @rpath/libmysqlclient.21.dylib /Users/fancy-lee/mysql/mysql-8.0.32-macos13-arm64/lib/libmysqlclient.21.dylib _mysql.cpython-39-darwin.so
注:/Users/fancy-lee/mysql/mysql-8.0.32-macos13-arm64/lib/libmysqlclient.21.dylib为第2步查找到libmysqlclient.21.dylib的文件信息
4、查看执行是否成功 otool -L _mysql.cpython-39-darwin.so
5、检查是否还报错:python3 -c "import MySQLdb"
install_name_tool和otool工具说明
Mac系统下的app和dylib动太库引用的第三方动态库需要手动设置引用的库路径,用的工具就是install_name_tool,查看一个可执行文件或者动态库引用的第三方库路径则使用的工具是otool