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

2024-05-23 15:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我成功地安装了所有东西,或者我想:

  • 用于x86_64的MySQL 5.5。
  • Python2.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

我想我已经读了很多关于这个主题的答案和谷歌搜索结果,想不出其他的尝试了。任何建议都将不胜感激。


Tags: import版本soeggmysqluserseggstmp
4条回答

借助@birryree的评论,我发现了这个问题。按照@birryrree在他的回答中建议的步骤来做可能会更好,但我以前确实尝试过,而且成功了:

按照建议,我做到了:

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(然后“安装”)

架构名称错误,应该是'-arch x86_64',没有“i”,所以它忽略了我的标志并安装了32位。

安装下载的64位mysql python包的正确命令(从源文件夹中):

sudo ARCHFLAGS='-arch x86_64' python setup.py build
sudo ARCHFLAGS='-arch x86_64' python setup.py install

我认为在Mac 64位上做这件事可能会有点古怪(如果你用谷歌搜索这个问题也会出现很多)。

我遇到过,你可以做几件事:

覆盖环境

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

在外壳中:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

然后运行python,看看是否可以import MySQLdb

如果这样做有效,您可以通过改变shell配置文件(很可能是.bash_profile)使其永久化。

使用自制

我真的不喜欢浪费时间去确保MySQL和Python以及所有正确的架构,然后分别安装它们。我运行^{},这是一种用于Mac的包管理器。如果你安装了它,你可以很容易地解决这个问题:

  • brew install python
  • brew install mysql
  • /usr/local/share/python/easy_install mysql-python

请注意,自制程序安装在/usr/local中,因此您应该在/usr/bin/bin之前,将/usr/local/bin添加到PATH中,否则您会很困惑python为什么不同。

也可以将/usr/local/share/python添加到PATH中,使其永久。

借助@birryree的评论,我发现了这个问题。按照@birryrree在他的回答中建议的步骤来做可能会更好,但我以前确实尝试过,而且成功了:

按照建议,我做到了:

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(然后“安装”)

架构名称错误,应该是'-arch x86_64',没有“i”,所以它忽略了我的标志并安装了32位。

安装下载的64位mysql python包的正确命令(从源文件夹中):

sudo ARCHFLAGS='-arch x86_64' python setup.py build
sudo ARCHFLAGS='-arch x86_64' python setup.py install

非常重要!

如上所述,请确保运行的是64位版本的mysql。很容易忽略这个细节,特别是如果你已经从雪豹升级。(我当然知道)。

如果您不确定是否要删除系统上较旧版本的mysql,请参阅本文:http://johnmcostaiii.net/2011/removing-mysql-osx-lion/

相关问题 更多 >