【问题标题】:Cannot import module mariadb无法导入模块 mariadb
【发布时间】:2021-06-06 12:14:48
【问题描述】:

我在 MacOS 11.2.2 上使用 python 3.9 并想使用已安装的 mariadb(“mariadb 10.5.9 已安装并且是最新的”)。

但是,python 无法导入模块 mariadb,我得到这个错误:

import mariadb  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mariadb/__init__.py", line 10, in <module>
    from ._mariadb import (
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mariadb/_mariadb.cpython-39-darwin.so, 2): Symbol not found: _mysql_ps_fetch_functions
  Referenced from: /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mariadb/_mariadb.cpython-39-darwin.so
  Expected in: flat namespace
 in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mariadb/_mariadb.cpython-39-darwin.so

请帮助纠正这个问题。谢谢。

【问题讨论】:

  • 您是按照those 的步骤还是只是跑了pip install mariadb
  • @gribvirus74。这些步骤并不是那么有帮助。是的,我安装了 python,是的,mariaDB 已安装,它应该安装连接器。这是路径问题吗?
  • 我对此表示怀疑。我的猜测是它与这些 C 库有关。但我认为即使您的系统上没有它们,它也应该安装二进制包或安装失败。

标签: python python-3.x macos mariadb


【解决方案1】:

评论太长了...

_mariadb.cpython-39-darwin.so 应该与 libmariadb.3.dylib 链接,后者应该提供导出的符号 mysql_ps_fetch_functions。

为了确定问题,我建议如下:

  1. 检查 mariadb.cpython-39-darwin.so 是否与 Connector/C 链接:

ldd /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mariadb/_mariadb.cpython-39-darwin.so 应该列出 libmariadb.3.dylib

  1. 确定 libmariadb.3.dylib 的位置并检查输出

nm libmariadb.3.dylib | grep mysql_ps_fetch_functions.

如果输出没有列出 mysql_ps_fetch_functions api 调用,您安装的 C/C 版本太旧,或者您安装了多个 C/C 实例。 自制,例如提供最新版本 3.1.12,要使用此版本,请确保 setup.py 会找到最新安装的 mariadb_config。

您也可以从源代码构建 C/C 和 C/Python。

我知道安装不是很舒服,但为非 Windows 平台提供通用二进制文件效果不佳,因为依赖项太多(如 TLS 库)。

【讨论】:

  • 第一个命令(ldd 的 mac 等效项是 otool -L):otool -L /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages /mariadb/_mariadb.cpython-39-darwin.so /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mariadb/_mariadb.cpython-39-darwin.so: /usr/ lib/libSystem.B.dylib(兼容版本1.0.0,当前版本1292.60.1)
  • /Library/Developer/CommandLineTools/usr/bin/nm: error: libmariadb.3.dylib: 没有这样的文件或目录。
  • 我准备放弃了。我希望有一个适用于 Mac 的安装程序——毕竟 MacOS 并不是没有人愿意安装 MariaDB 的晦涩难懂的风格。
  • 如果未找到 libmariadb.3.dylib,则表示未安装。你试过吗? brew install mariadb-connector-c ?
  • 对不起,这也没有用。非常感谢您提供的帮助。
猜你喜欢
  • 2012-11-06
  • 2017-11-11
  • 2021-07-27
  • 2019-06-13
  • 2020-12-15
  • 2020-08-28
  • 2015-10-04
  • 2014-02-19
相关资源
最近更新 更多