在Mac OSx 10.8.1上导入Python 2.7.2中的MySQLdb时出错

时间:2012-09-08 03:15:32

标签: python osx-mountain-lion

我最近升级到OSx Mountain Lion(10.8),不久后升级到10.8.1。我试图做一个“导入MySQLdb”并遇到以下错误:

>>> import MySQLdb
/Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg/_mysql.pyc, but /Users/jlk/Software_Downloads/MySQL-python/MySQL-python-1.2.3 is being added to sys.path
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "MySQLdb/__init__.py", line 19, in <module>
    import _mysql
  File "build/bdist.macosx-10.8-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.8-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/jlk/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg-tmp/_mysql.so, 2): no suitable image found.  Did find:
    /Users/jlk/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg-tmp/_mysql.so: mach-o, but wrong architecture

不确定错误或如何解决问题。我已经google了,但是我无法找到与此问题有关的osx 10.8.1的任何答案。它最后说它是“错误的架构”,但我知道我安装的是该模块的OSx版本。我看到的唯一区别是它表示10.8,但这是该模块的最新版本。

供参考:

操作系统:OSx Mountain Lion 10.8.1 Pyhon版本:2.7.2

有什么想法吗?

此致

杰夫

1 个答案:

答案 0 :(得分:2)

您正在使用的python解释器和_mysql.so可能是针对不同的体系结构集构建的,例如:一个是i386而另一个是32/64位胖。您可以通过运行file /path/to/your python interpreterfile /path/to_mysql.so并比较输出来检查。

你能重建MySQLdb并确保pip / easy_install使用正确的python解释器吗?此外,如果您还没有这样做,请升级您的Xcode版本及其命令行工具,以避免通常的构建错误。

编辑我可以使用Apple的股票Python 2.7.1在10.7上重现这一点。问题实际上是python解释器,MySQLdb和MySQL服务器之间的架构不匹配。 Python是32/64位胖版本,我安装的MySQL版本只有32位。 MySQLdb在构建时会查看MySQL的体系结构,所以我只得到一个32位_mysql.so。在python中导入可能以64位模式运行的模块时,会发生错误。

我认为安装和运行64位版本的MySQL以及重建MySQL-Python应该可以解决这个问题,或者你可以force Python to run in 32bit mode