Python mysqldb: 库未加载: libmysqlclient

我刚刚在我的 mac os 10.6上编译并安装了 python 2.7的 mysqldb。我创建了一个简单的导入测试文件

import MySQLdb as mysql

首先,这个命令是红色下划线,信息告诉我“未解决的导入”。然后我尝试运行以下简单的 python 代码

import MySQLdb as mysql


def main():
conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )


if __name__ == '__main__'():
main()

当执行它时,我得到以下错误消息

Traceback (most recent call last):
File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
import MySQLdb as mysql
File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
\namespace cvdv
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
Reason: image not found

我的问题可能有什么解决办法?

编辑: 实际上,我发现这个库位于/usr/local/mysql/lib 中。所以我需要告诉我的 pydev Eclipse 版本在哪里可以找到它。我要把这个放在哪里?

107610 次浏览

在 pydev eclipse 插件中,你可能需要设置 dyLD 的环境变量。中所示的路径可以设置

在雪豹上安装 mysqldb

我通过创建一个到图书馆的符号链接解决了这个问题。

实际的图书馆位于

/usr/local/mysql/lib

然后我创建了一个符号链接

/usr/lib

使用以下命令:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

这样我就有了下面的映射:

ls -l libmysqlclient.18.dylib
lrwxr-xr-x  1 root  wheel  44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

就是这样,之后一切都很顺利。

编辑:

注意,由于 MacOS El Capitan 系统完整性保护(SIP,也称为“无根”)将阻止您在 /usr/lib/中创建链接。 您可以按照 这些指示禁用 SIP,但是您可以在 /usr/local/lib/中创建一个链接:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

我发现这个问题有另一种解决方案,而不是创建一个符号链接。

您将路径设置为您的目录,其中是 libmysqlclient。Dylib 驻留在 dYLD _ librARY _ PATh 环境变量。我所做的就是在我的。Bash _ profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH

就是这样。

我发现把这个放进你的。个人资料或。Bashrc (无论您使用哪种方法)是最简单的方法,与在源文件中保留路径相比,系统链接是混乱的。

另外,与 yoshisurfs 的答案相比,在安装 mysql 时,大多数情况下,mysql 目录应该重命名为 mysql,而不是整个文件名,以便于使用。

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

我的首选方法是实际修复库,而不是根据应用程序的运行方式处理环境变量,这些变量可能在作用域中,也可能不在作用域中。这实际上是一个相当简单的过程。

首先,查看错误输出,看看有问题的 python 模块位于何处:

Import Error: dlopen (/Library/Python/2.7/site-package/_ mysql.so,2) : Library not load: libmysqlclient. 18. dylib 重要错误: dlopen (/Library/Python/2.7/site-package/_ mysql.so,2) : 库未加载: libmysqlclient. 18. dylib 引用自:/Library/Python/2.7/site-package/_ mysql.so 原因: 未找到图像

好的,那么违规文件是/Library/Python/2.7/site-package/_ mysql.so

接下来,找出 _ mysql.so 认为应该在哪里找到 libmysqlclient。18. dylib:

% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

因此,它正在寻找 libmysqlclient。18. dylib,它没有路径信息,让我们来修复它:

% sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so

Now _ mysql.so 知道库的完整路径,并且不管环境变量如何,一切都可以正常工作。

% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
/usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

在我的例子中,我使用 Mac OS X 10.9 Mavericks 得到了错误。我从 DMG 的 Oracle/MySQL 网站直接安装了 MySQL 社区服务器。

我所需要做的就是将 lib 文件符号链接到/usr/local/lib 目录。

mkdir -p /usr/local/lib
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib

额外的好处: 如果你也在运行 Mac OS X,那么有一个很棒的工具可以帮助你找到像 libmysqlclient 这样的文件。18。Dylib 文件,http://apps.tempel.org/FindAnyFile。这就是我最初找到 dylib 文件位置的方法。

我有这个问题,我花了一段时间,想出了如何解决这个问题。

我的情况略有不同。我的 MySQL 服务器是5.1. x 版本。不知怎么的,我把 MySQL-python 从1.2.3升级到了1.2.5。我一直得到这个问题,因为事件,我添加了以下软链接。

libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

事实证明,MySQL 5.1. x 没有 libmysqlclient。Dylib,但只有 libmysqlclient。16。Dylib.您可以通过将 MySQL-python 降级到1.2.3或将 MySQL 服务器升级到5.6. x (我还没有试过5.5. x)来解决这个问题

我把这个库降级到了1.2.3,因为升级 MySQL 对我来说不是一个选择。

对于那些使用自制软件的人,你可以用以下方法来解决这个问题:

$ brew link mysql

当你在酋长岩,会得到错误: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted 需要关闭「系统完整性保护」。

首先,重新启动并保持 cmd + R 进入恢复模式,然后启动终端并键入命令: csrutil disable,现在可以重新启动并再试一次。

在新的 El Capitan 安装中,SIP (无根阻止访问 usr/lib/)默认处于打开状态,除非处于恢复模式,否则无法创建符号链接。正如@yannisXu 所说,您可以禁用 SIP 并执行到/usr/lib/local 的符号链接,这样就可以工作了。

您可以在 MAC OSX El Capitan 上使用以下命令,而不必关闭 SIP:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

以前有一个选项,您可以作为 root 用户登录,这个选项可以禁用 SIP,但是在现在已经过时的最终版本中,您可以在这里阅读更多关于它的内容: https://forums.developer.apple.com/thread/4686

问题:

在 Developer Beta 1中有一个 nvram boot-args 命令,它可以在使用 root 权限运行时禁用 SIP:

nvram boot-args="rootless=0"

这个禁用 SIP 的选项是否也可以在 El Capitan 版本中使用?或者这仅仅是为了开发者构建?

回答:

这个 nvram boot-args 命令将会消失。它将不会在 El Capitan 版本中提供,并可能在 Developer Beta 版本结束之前消失。密切关注未来开发者测试版的发布说明。

在我的案例中,在 El Capitan (OSX 10.11)中,我必须在 ~/.bash_profile中执行以下操作

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"

http://dev.mysql.com/downloads/connector/c/下载 MySQL Connector/C。 获取包之后,创建一个新目录“ Mysql”,解压目录 Mysql 下的 Myql Connector 文件,然后在 Mysql 下创建另一个空目录“ build”。我们将使用’构建’来构建 MySQL 连接器/C。 Cd build & & cmake. ./your-MySQL-Connector-source-dir 安装 Make install 之后,您将在/usr/local 下获得一个名为 mysql 的目录。它包含所有你需要的头和库。转到这个目录,并将头和库复制到相应的位置。

我在几个虚拟环境中遇到过这种情况。

pip uninstall MySQL-python
pip install -U MySQL-python

两次都成功了。

你可以试试:

sudo install_name_tool -change libmysqlclient.18.dylib /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so`

注意 MacOS 上 MySQL Connector/C 的 bug (我当前的版本是10.13.2) ,修复 MySQL _ config 并重新安装 mysqlclient 或 MySQL-python,细节是这样的