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)
小智 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)
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)
而已.
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)
我在几个虚拟环境中遇到过这个问题。
pip uninstall MySQL-python
pip install -U MySQL-python
Run Code Online (Sandbox Code Playgroud)
两次都工作了。