簡體   English   中英

為什么只運行mysql5.7的本地需要libmysqlclient.21.dylib?

[英]Why libmysqlclient.21.dylib is needed on local with only mysql5.7 running?

在我的本地我有 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+提供

  2. site-packages/MySQLdb在做什么? 猜猜連接到我本地的 mysql? 那么為什么它會詢問不存在的21.dylib

我剛剛遇到了同樣的問題(使用 python 3.8),多虧了Bill Karwin 的回答,我才能夠通過使用—-no-cache選項重新安裝mysqlclient來修復它,以確保輪子得到重建:

pip uninstall mysqlclient
pip install mysqlclient —-no-cache

在我的案例中,這是導致libmysqlclient.21.dylib錯誤的事件序列:

  • 通過 Homebrew 安裝mysql ,它安裝了mysql@8
  • pip-installed 為一個項目安裝了一堆依賴,包括mysqlclient
  • 意識到我實際上需要mysql@5.7這個項目,降級mysql
  • 運行項目,看到了關於缺少libmysqlclient.21.dylib的錯誤,因為mysqlclient wheel 是在安裝mysql@8時構建的

MySQLdb 是 C 中實現的 Python 2 模塊,它鏈接到 libmysqlclient。 如果您有一個針對 MySQL 8.0 客戶端庫編譯的 MySQLdb 二進制文件,那么它將有一個對 libmysqlclient21.dylib 的固定引用,如果該庫不存在,則會導致您看到的錯誤。

MySQLdb 也不兼容 Python 3,我希望你現在使用 Python 3

您可以使用 PyMySQL 作為 MySQLdb 的替代品。 PyMySQL 是全 Python 的,所以它不應該引用任何 libmysqlclient。

或者,使用MySQL-Connector Python

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM