mysql-python 安装问题(在 Mac OS X Lion 上)

10

我认为我已经成功地安装了所有东西:

  • MySQL 5.5 for 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

我认为我已经阅读了大部分与此主题相关的SO回答和Google搜索结果,无法想出其他尝试的方法。欢迎提出任何建议。


1
你能执行 file /Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so 吗? - wkl
是的,这个输出是:/Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so: Mach-O bundle i386,这怎么可能呢? - AJJ
5个回答

11

我认为在Mac 64位上进行这个操作可能会有些小问题(如果你在谷歌搜索这个问题,这个问题显示出现了很多次)。

我遇到过这个问题,你可以做一些事情来解决:

覆盖环境

你可以更改DYLD_LIBRARY_PATH环境变量,告诉链接器在哪里查找动态库(.so文件等)。你说你也下载了MySQL的64位版本,所以在它安装的位置,更改你在这里看到的路径:

在shell中:

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中,以使其永久生效。


1
我为了让64位的Python与64位的MySQL兼容而苦苦挣扎了一整天,让我几乎抓狂。不过Homebrew似乎要容易得多。 - nflacco
@nflacco - 说实话,如果你正在使用 Mac 并尝试安装依赖于其他库和软件的库到你的系统上,首先尝试使用 Homebrew(或 MacPorts 或 Fink 等)来完成。我以前曾经为了解决依赖关系而进行过太多的战斗。它仍然存在一些问题,但仍然比较困难的方式要好。 - wkl

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

还有$(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

很酷,你把它搞定了。你可以接受自己的答案,以便未来的读者。 :) - wkl

3

非常重要!

如上所述,请确保您正在运行64位版本的mysql。这一细节很容易被忽视,特别是如果您从Snow Leopard升级过来(我肯定会这样做)。

如果您不确定如何在系统中删除旧版本的mysql,请参考此文章:http://johnmcostaiii.net/2011/removing-mysql-osx-lion/


这让我有些困惑。请注意,Bitnami的MAMP堆栈仅支持32位。 - Timmmm

2

1

同时确保您也在运行Python 64位。我曾经运行过mysql 64位和Python 32位,因此出现了“错误的架构”错误。


我相信OP说他有Python“x86_64”,也就是64位的。 - quantum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接