库未加载:/usr/local/opt/mysql/lib/libmysqlclient.21.dylib 和原因图像未找到

问题描述 投票:0回答:2
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不同。

python mysql homebrew mysql-python
2个回答
3
投票

简而言之,您的问题是您正在尝试使用古老的

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
涵盖了这一点。


0
投票
修复 MacOS 14 - 索诺玛

经过大量搜索和困难时期,我为任何 MacOS 用户找到了可能的答案。如果您使用的是 Sonoma MacOS 14,请按照以下步骤操作。

    检查抛出的确切错误并查找以
  1. 开头的部分
ImportError: dlopen(.../_mysql.cpython-310-darwin.so) Library not loaded: /opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib
这两个部分非常重要:尝试加载库的

.so

文件和正在加载的
.dylib
库。

  1. 在终端内转到

    so

    文件所在的文件夹

  2. 在该文件夹内运行命令

otool -L _mysql.cpython-310-darwin.so
并搜索它试图找到的当前dylib版本

  1. 转到

    /opt/homebrew/opt/mysql/lib/

     文件夹并查找您的实际文件。在我的例子中 
    libmysqlclient.22.dylib
     带有名为 
    libmysqlclient.dylib
     的符号链接
    

  2. 使用以下命令更改为正确的文件:

install_name_tool -change /opt/homebrew/opt/mysql/lib/{previous}.dylib /opt/homebrew/opt/mysql/lib/libmysqlclient.dylib _mysql.cpython-310-darwin.so

    再次运行
  1. 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 错误。

© www.soinside.com 2019 - 2024. All rights reserved.