在我的本地,我已经运行了mysql@5.7。我有一个依赖于mysql的应用程序,但得到了有趣的错误:
File "/xxx/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>
from . import _mysql
ImportError: dlopen(/xxx/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib
Referenced from: /xxx/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so
Reason: image not found
1.现在只有mysql@5.7在我的本地运行,所以我可以看到我有/usr/local/opt/mysql@5.7/lib/libmysqlclient.20.dylib
,但我从来没有/usr/local/opt/mysql/lib/libmysqlclient.21.dylib
。为什么这里需要它?libmysqlclient.21.dylib
仅由mysql8.0+
提供
site-packages/MySQLdb
是什么?猜猜连接到我的本地mysql?那为什么它要问不存在的21.dylib
呢?
2条答案
按热度按时间mhd8tkvw1#
我刚刚遇到了同样的问题(使用Python 3.8),感谢Bill Karwin's answer能够通过使用
—-no-cache
选项重新安装mysqlclient
来修复它,以确保车轮得到重建:下面是在我的例子中导致
libmysqlclient.21.dylib
错误的事件序列:mysql
,Homebrew安装了mysql@8
mysqlclient
mysql@5.7
来完成项目,于是将mysql
降级libmysqlclient.21.dylib
的错误,因为mysqlclient
wheel是在安装mysql@8
时构建的j2cgzkjk2#
MySQLdb是用C实现的Python 2模块,它链接到libmysqlclient。如果你有一个针对MySQL 8.0客户端库编译的MySQLdb二进制文件,那么它将有一个对libmysqlclient21.dylib的固定引用,如果该库不存在,那将导致你看到的错误。
MySQLdb也不兼容Python 3和I would hope you use Python 3 by now。
您可以使用PyMySQL作为MySQLdb的替代品。PyMySQL是全Python的,所以它不应该引用任何libmysqlclient。
或者,使用MySQL-Connector Python。