Python mysqldb:未加载库:libmysqlclient.18.dylib

too*_*oom 168 python mysql-python

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

import MySQLdb as mysql
Run Code Online (Sandbox Code Playgroud)

首先,这个命令带有红色下划线,信息告诉我"Unresolved import".然后我尝试运行以下简单的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()
Run Code Online (Sandbox Code Playgroud)

执行时,我收到以下错误消息

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
Run Code Online (Sandbox Code Playgroud)

什么可能解决我的问题?

编辑:其实我发现该库位于/ usr/local/mysql/lib中.所以我需要告诉我的pydev eclipse版本在哪里找到它.我在哪里设置这个?

too*_*oom 322

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

实际的图书馆驻留在

/usr/local/mysql/lib
Run Code Online (Sandbox Code Playgroud)

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

/usr/lib
Run Code Online (Sandbox Code Playgroud)

使用命令:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Run Code Online (Sandbox Code Playgroud)

所以我有以下映射:

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
Run Code Online (Sandbox Code Playgroud)

就是这样.之后一切正常.

编辑:

请注意,自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
Run Code Online (Sandbox Code Playgroud)

  • `sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib/usr/lib/libmysqlclient.18.dylib` (47认同)
  • 如果您在El Capitan上运行,则必须禁用SIP:https://forums.developer.apple.com/thread/7935. (2认同)

小智 132

我首选的方法是实际修复库而不是使用环境变量,这些环境变量可能实际上也可能不在实际范围内,具体取决于应用程序的运行方式.这实际上是一个相当简单的过程.

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

ImportError:dlopen(/Library/Python/2.7/site-packages/_mysql.so,2):未加载库: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)
Run Code Online (Sandbox Code Playgroud)

所以,它正在寻找没有路径信息的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
Run Code Online (Sandbox Code Playgroud)

现在_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)
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个更好的解决方案,所以它修复了所有virtualenvs?sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib $ VIRTUAL_ENV/lib/python2.7/site-packages/_mysql.so (4认同)

yos*_*shi 57

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

将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
Run Code Online (Sandbox Code Playgroud)

而已.

  • 在/ usr/local/mysql中还有一个指向已安装版本的符号链接,因此我建议将您的行更改为:export DYLD_LIBRARY_PATH =/usr/local/mysql/lib /:$ DYLD_LIBRARY_PATH (7认同)

Nic*_*ams 37

在我的情况下,我得到了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
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*son 21

我发现把它放在你的.profile或.bashrc(无论你用哪个)是最简单的方法,与保存源文件中的路径相比,sym链接很麻烦.

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是一个非常理智和简单的答案。对我来说效果很好 - 谢谢! (2认同)

Joh*_*ord 5

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

pip uninstall MySQL-python
pip install -U MySQL-python
Run Code Online (Sandbox Code Playgroud)

两次都工作了。