为什么只有mysql5.7运行时,本地需要libmysqlclient.21.dylib?

g6baxovj  于 2023-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(220)

在我的本地,我已经运行了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+提供

  1. site-packages/MySQLdb是什么?猜猜连接到我的本地mysql?那为什么它要问不存在的21.dylib呢?
mhd8tkvw

mhd8tkvw1#

我刚刚遇到了同样的问题(使用Python 3.8),感谢Bill Karwin's answer能够通过使用—-no-cache选项重新安装mysqlclient来修复它,以确保车轮得到重建:

pip uninstall mysqlclient
pip install —-no-cache mysqlclient

下面是在我的例子中导致libmysqlclient.21.dylib错误的事件序列:

  • 通过Homebrew安装了mysql,Homebrew安装了mysql@8
  • pip-为项目安装了一堆依赖项,包括mysqlclient
  • 我意识到我实际上需要mysql@5.7来完成项目,于是将mysql降级
  • 我运行了项目,看到了关于缺少libmysqlclient.21.dylib的错误,因为mysqlclient wheel是在安装mysql@8时构建的
j2cgzkjk

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

相关问题