mysql-python安装问题(在mac os x lion上)
我以为我已经成功安装了一切,结果却发现可能还有问题:
- 安装了 MySQL 5.5,适用于 x86_64。
- 安装了 Python 2.7,适用于 x86_64。
- 安装了 mysql-python 1.2.3,适用于 x86_64。
但是当我尝试运行:
import MySQLdb
我得到了:
ImportError:
dlopen(/Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so, 2):
no suitable image found.
Did find:
/Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so: mach-o,
but wrong architecture
我还可能漏掉了什么呢?
我的系统当然也是 64 位的,运行 uname -a
命令显示:
Darwin ajmacbook.local 11.1.0 Darwin Kernel Version 11.1.0: Tue Jul 26 16:07:11 PDT 2011; root:xnu-1699.22.81~1/RELEASE_X86_64 x86_64
我觉得我已经看过大部分相关的 StackOverflow 回答和谷歌搜索的结果,想不出还有什么其他的办法可以尝试。如果有建议的话,非常感谢!
5 个回答
非常重要!
如上所述,请确保你正在使用64位版本的mysql。这个细节很容易被忽视,特别是如果你是从Snow Leopard升级过来的话。(我自己就忽略了这点)。
如果你不确定是否要删除系统上旧版本的mysql,可以参考这篇文章: http://johnmcostaiii.net/2011/removing-mysql-osx-lion/
我觉得在Mac 64位上做这个可能会有一些小问题(如果你在网上搜索这个问题,会发现很多人也遇到过)。
我也碰到过这个问题,有几个解决办法:
修改环境变量
你可以改变一下 DYLD_LIBRARY_PATH
这个环境变量,它告诉链接器去哪里找动态库(比如 .so 文件)。你提到你也下载了64位的MySQL,所以在它安装的地方,修改一下你看到的路径:
在终端里输入:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
然后运行 python
,看看能不能 import MySQLdb
。
如果可以的话,你可以通过修改你的 shell 配置文件(可能是 .bash_profile
)来让这个设置永久生效。
使用 Homebrew
我不太喜欢自己去搞定 MySQL 和 Python 的架构问题,还要单独安装它们。我用的是 homebrew
,这是一种在Mac上管理软件的工具。如果你安装了它,解决这个问题会简单很多:
brew install python
brew install mysql
/usr/local/share/python/easy_install mysql-python
需要注意的是,homebrew会安装到 /usr/local
,所以你应该把 /usr/local/bin
加到你的 PATH
里,放在 /usr/bin
和 /bin
前面,不然你会搞不清楚为什么 python
会不一样。
你也可以把 /usr/local/share/python
加到你的 PATH
里,这样就能让这个设置永久生效。
在@birryree的评论帮助下,我找到了问题所在。我可能更应该按照@birryree在他回答中建议的步骤来做,但我之前试过这个方法,并且成功了:
按照建议,我做了:
file /Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so
结果是:[...]: Mach-O bundle i386
,这说明架构不对。接着,我对mysql和python做了同样的检查,以确保没有问题:
file $(which python)
的结果是:
/Library/Frameworks/Python.framework/Versions/2.7/bin/python: Mach-O universal binary with 2 architectures
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture i386): Mach-O executable i386
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64
而file $(which mysql)
的结果是:
/usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64
所以我卸载了mysql-python这个包:sudo pip uninstall mysql-python
,然后重新安装了一遍。但在这个过程中,我意识到自己在安装这个包时犯了个错误。第一次我输入的是:
sudo ARCHFLAGS='-arch ix86_64' python setup.py build
(然后再输入“install”)
架构名称写错了,应该是'-arch x86_64',没有“i”,所以它就忽略了我的设置,安装了32位的版本。
正确的命令来安装下载的mysql-python包(针对64位,从源文件夹):
sudo ARCHFLAGS='-arch x86_64' python setup.py build
sudo ARCHFLAGS='-arch x86_64' python setup.py install