首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么本地只运行mysql5.7就需要libmysqlclient.21.dylib?

为什么本地只运行mysql5.7就需要libmysqlclient.21.dylib?
EN

Stack Overflow用户
提问于 2022-02-18 05:44:16
回答 2查看 326关注 0票数 0

在我的本地程序中,mysql@5.7正在运行。我有一个依赖mysql的应用程序,但是有一个有趣的错误:

代码语言:javascript
复制
    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+提供
  2. site-packages/MySQLdb在做什么?猜一下连接到我的本地mysql?那么,它为什么要问不存在的21.dylib呢?
EN

回答 2

Stack Overflow用户

发布于 2022-03-23 03:25:20

我刚刚遇到了同样的问题(使用python3.8),感谢比尔·卡温的回答能够通过重新安装带有—-no-cache选项的mysqlclient来修复它,以确保车轮得到重建:

代码语言:javascript
复制
pip uninstall mysqlclient
pip install mysqlclient —-no-cache

在我的例子中,导致libmysqlclient.21.dylib错误的事件顺序如下:

  • 通过Homebrew安装mysql,后者安装了mysql@8
  • pip-为项目安装了一组依赖项,包括mysqlclient
  • 意识到我实际上需要mysql@5.7来做这个项目,降低了mysql的等级
  • 运行该项目,并看到有关缺少libmysqlclient.21.dylib的错误,因为mysqlclient车轮是在安装mysql@8时生成的。
票数 1
EN

Stack Overflow用户

发布于 2022-02-18 16:28:27

MySQLdb是用C实现的Python2模块,它链接到libmysqlclient。如果您的二进制MySQLdb是针对MySQL 8.0客户端库编译的,那么它将有一个对libmysqlclient21.dylib的固定引用,如果该库不存在,这将导致您看到的错误。

MySQLdb也与Python3和我希望你现在使用Python 3不兼容。

您可以使用PyMySQL代替MySQLdb。PyMySQL是all-Python,所以它不应该引用任何libmysqlclient。

或者,使用MySQL-Connector Python

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71168895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档