177

我刚刚在我的 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 版本在哪里可以找到它。我在哪里设置这个?

4

15 回答 15

324

我通过创建到库的符号链接解决了这个问题。IE

实际的库位于

/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
于 2011-08-06T15:28:29.377 回答
138

我的首选方法是实际修复库,而不是根据应用程序的运行方式使用可能实际上在范围内或可能不在范围内的环境变量。这实际上是一个相当简单的过程。

首先,查看错误输出以查看有问题的 python 模块所在的位置:

ImportError: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib 引用自:/Library/Python/2.7/site-packages/_mysql.so 原因:找不到图片

好的,所以有问题的文件是 /Library/Python/2.7/site-packages/_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

现在 _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)
于 2012-11-16T17:56:50.597 回答
60

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

您将 libmysqlclient.18.dylib 所在目录的路径设置为 DYLD_LIBRARY_PATH 环境变量。我所做的是在我的 .bash_profile 中添加以下行:

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

就是这样。

于 2011-08-10T03:18:56.017 回答
37

就我而言,我遇到了 Mac OS X 10.9 Mavericks 的错误。我直接从 DMG 的 Oracle/MySQL 网站安装了 MySQL Community Server。

我需要做的就是将 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 文件位置的方式。

于 2013-10-27T20:30:50.617 回答
26

我发现把它放在你的 .profile 或 .bashrc (无论你使用哪个)中是最简单的方法,与在源文件中保留路径相比,符号链接是混乱的。

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
于 2012-06-29T16:09:54.947 回答
5

我在几个虚拟环境中遇到了这个问题。

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

两次都工作。

于 2017-06-29T18:14:33.943 回答
3

在 pydev eclipse 插件中,您可能需要为 DYLD 设置环境变量。路径可以如图所示设置

在雪豹上安装mysqldb

于 2011-06-30T15:40:46.917 回答
3

对于那些使用自制软件的人,您可以使用以下方法解决此问题:

$ brew link mysql
于 2015-02-01T17:08:37.847 回答
2

当你在 El Capitan 时,会报错:ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted 需要关闭“系统完整性保护”。

首先,重新启动并按住 cmd + R 进入恢复模式,然后启动终端并输入命令:csrutil disable,现在您可以重新启动并重试。

于 2015-09-09T06:15:57.247 回答
2

就我而言,在 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}"
于 2015-11-04T10:47:32.340 回答
1

在新的 El Capitan 安装中,默认情况下 SIP(​​rootless 阻止访问 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 发行版中不可用,并且可能在开发者测试版结束前消失。请密切关注未来开发人员测试版的发行说明。

于 2015-10-07T09:16:01.263 回答
0

我遇到了这个问题,我花了一段时间才弄清楚如何解决这个问题。

我的情况略有不同。我的 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.18.dylib,而只有 libmysqlclient.16.dylib。您可以通过将 MySQL-python 降级到 1.2.3 或将 MySQL 服务器升级到 5.6.x 来解决此问题(我没有尝试过 5.5.x。)

我将库降级到 1.2.3,因为升级 MySQL 对我来说不是一个选项。

于 2014-07-14T15:19:33.203 回答
0

转到http://dev.mysql.com/downloads/connector/c/并下载 MySQL Connector/C。拿到包后,新建一个目录'mysql',解压mysql目录下的Mysql Connector文件,然后在mysql下,新建一个空目录'build'。我们将使用'build'来构建MySQL Connector/C。cd build && cmake ../your-MySQL-Connector-source-dir make && make install make install 后,会在 /usr/local 下得到一个名为 mysql 的目录。它包含您需要的所有头文件和库。转到此目录,并将头文件和库复制到相应的位置。

于 2016-07-27T08:02:42.160 回答
0

你可以试试:

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`
于 2018-02-10T01:58:52.350 回答
0

注意 macOS 上 MySQL Connector/C 的 bug(我当前版本是 10.13.2),修复 mysql_config 并重新安装 mysqlclient 或 MySQL-python,这里是详细信息

于 2019-04-28T02:49:43.180 回答