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

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


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

实际的图书馆驻留在

/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

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

首先,查看错误输出以查看有问题的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)

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

将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

而已。

链接地址: http://www.djcxy.com/p/67887.html

上一篇: Python mysqldb: Library not loaded: libmysqlclient.18.dylib

下一篇: If Python is interpreted, what are .pyc files?