最近在使用 Django 框架,因为升级到4.2版本了,对应的本机 Mysql 5.7 就不适用了,于是升级到了 Mysql 8.0,写好代码之后出现如下错误:
仔细分析一下错误的描述:
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so, 2):
Library not loaded: /usr/local/mysql/lib/libmysqlclient.20.dylib
Referenced from: /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so
Reason: image not found
可以看到的是 Library not loaded:
, 库文件并未加载,库文件地址为:/usr/local/mysql/lib/libmysqlclient.20.dylib
, 直接在命令行执行:
open /usr/local/mysql/lib/
得到如下界面:
可以看到,在 mysql
文件夹下,只存在libmysqlclient.21.dylib
文件,并不存在libmysqlclient.20.dylib
,这既是问题的症结所在了,我需要加载的是20
文件,但是现在只存在21
文件,然后我们来找一下我系统中,dylib
到底有哪些?使用命令行:
sudo find /usr/local -name "libmysqlclient.*.dylib"
找到了如下图:
我发现目前只存在我的mysql-8.0.12
文件夹下面,但是在 Django 框架下,没办法去更改加载21
文件,那么能不能生成一个20
文件,来内容来使用21
文件替代呢?正好Mac
电脑下有这种命令:
ln -s [目标文件或目录] [符号链接名]
ln 是一个在 Unix 和类 Unix 系统(包括 macOS 和 Linux)中非常常用的命令行工具,用于创建链接。
- 符号链接(软连接):
符号链接类似于 Windows 中的快捷方式。它是一个特殊类型的文件,包含一个文本指针指向另一个文件或目录的路径。
创建符号链接的命令格式为:
ln -s [目标文件或目录] [符号链接名]
例如,如果你想创建一个指向 /usr/local/mysql/lib/libmysqlclient.20.dylib 的符号链接,你可以使用:
ln -s /usr/local/mysql/lib/libmysqlclient.20.dylib ~/libmysqlclient.20.dylib
这个命令会在你的根目录创建一个 libmysqlclient.20.dylib 的符号链接,它指向 /usr/local/mysql/lib/libmysqlclient.20.dylib。
- 硬链接
硬链接直接指向文件系统中的物理位置,不像符号链接那样仅仅是路径的引用。每个文件至少有一个硬链接(即其本身的文件名),添加的每个础链接都可以视为文件的另一个有效名称。硬链接对文件夹是不支持的。(和复制还是有些区别的)
创建硬链接的命令格式为:
ln [目标文件] [硬链接名]
例如,在同一目录下要为 /path/to/file.txt 创建一个硬链接,可以使用:
ln /path/to/file.txt /path/to/new_link.txt
那我为了解决这个问题,我只需要将我的21
文件链接到20
文件即可:
sudo ln -s /usr/local/mysql-8.0.12-macos10.13-x86_64/lib/libmysqlclient.21.dylib
/usr/local/mysql/lib/libmysqlclient.20.dylib
执行之后,再次查看对应文件夹:
可以看到,这里多了一个链接文件,然后重试项目:
发现链接成功! 搞定,如果有问题,可以随时wx:javainstalling,代号:Django!