Traceback (most recent call last):
File "/Applications/MAMP/htdocs/Minor Project/xyz.py", line 5, in <module>
import config
File "/Applications/MAMP/htdocs/Minor Project/config.py", line 5, in <module>
import MySQLdb
File "/Users/brijeshlakkad/Library/Python/2.7/lib/python/site-packages/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: dlopen(/Users/brijeshlakkad/Library/Python/2.7/lib/python/site-packages/_mysql.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib
Referenced from: /Users/brijeshlakkad/Library/Python/2.7/lib/python/site-packages/_mysql.so
**Reason: image not found**
当我使用“brew install mysql”安装mysql时,文件将被执行。当我执行brew install mysql时,有两个不同的mysql都单独运行。我执行了这个文件,然后所有数据都存储在local mysql中,与phpmyadmin mysql不同。
简而言之,您的问题是您正在尝试使用古老的
mysql-python
库,又名 MySQLdb
。该库在 MySQL 5.1 左右被废弃,因此它不支持 MySQL 6 及更高版本,而您可能拥有 MySQL 8.0,因此它正在查找的共享库不存在,因此出现 image not found
错误。
Homebrew 确实包含一个 [email protected]
包,我认为它有一个具有正确名称的 dylib,如果你真的想这样做,那么它可能足够旧,可以与
mysql-python
一起使用,但事实并非如此不会得到支持。或者您可以下载 MySQL 5.0 或 5.1 源代码并自行构建(没有任何早于 5.6 的 Mac 二进制文件可以在当前 macOS 上运行),这肯定会起作用。但更好的解决方案是使用仍在维护的库。不幸的是,有很多选择,但我的印象是大多数人都使用三大选择之一:
mysqlclient
是
mysql-python
的分支,它绑定到 C 库的当前版本(
brew install mysql
或从 MySQL/Oracle 网站下载安装程序)。
PyMySQL
是用纯Python重写的,甚至不需要C库。
MySQL Connector/Python
是MySQL/Oracle从头开始编写的一个新实现。 (您可能需要这个 Oracle 安装程序。)
PyMySQL
是比
mysqlclient
更好的直接替代品,它可以与宇宙中的其他所有东西很好地配合,而且它是编写良好的代码,如果遇到问题很容易调试......但它可能会非常慢。除非您需要维护一团糟的现有代码,否则通常不需要完美的直接替换,只需要具有非常接近的
connect
调用并支持所有 DB-API 2 的东西,并且
mysqlclient
涵盖了这一点。
ImportError: dlopen(.../_mysql.cpython-310-darwin.so) Library not loaded: /opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib
这两个部分非常重要:尝试加载库的.so
文件和正在加载的
.dylib
库。
so
文件所在的文件夹
otool -L _mysql.cpython-310-darwin.so
并搜索它试图找到的当前dylib版本
/opt/homebrew/opt/mysql/lib/
文件夹并查找您的实际文件。在我的例子中
libmysqlclient.22.dylib
带有名为
libmysqlclient.dylib
的符号链接
install_name_tool -change /opt/homebrew/opt/mysql/lib/{previous}.dylib /opt/homebrew/opt/mysql/lib/libmysqlclient.dylib _mysql.cpython-310-darwin.so
otool
命令查看更改
otool -L _mysql.cpython-310-darwin.so
输出应该是:
_mysql.cpython-310-darwin.so:
/opt/homebrew/opt/mysql/lib/libmysqlclient.dylib (compatibility version 21.0.0, current version 21.0.0)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
这将解决错误,并让您继续在 DJango 中进行迁移过程或让服务器再次运行,而不会出现 500 错误。