mysql-python安装问题(在mac os x lion上)

10 投票
5 回答
17386 浏览
提问于 2025-04-17 01:42

我以为我已经成功安装了一切,结果却发现可能还有问题:

  • 安装了 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 个回答

3

非常重要!

如上所述,请确保你正在使用64位版本的mysql。这个细节很容易被忽视,特别是如果你是从Snow Leopard升级过来的话。(我自己就忽略了这点)。

如果你不确定是否要删除系统上旧版本的mysql,可以参考这篇文章: http://johnmcostaiii.net/2011/removing-mysql-osx-lion/

11

我觉得在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 里,这样就能让这个设置永久生效。

9

在@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

撰写回答