【问题标题】:Python MySQL wrong architecture errorPython MySQL错误架构错误
【发布时间】:2011-03-04 22:15:21
【问题描述】:

我在这方面已经有一段时间了,并阅读了许多有关该主题的网站。怀疑我在撒谎导致这个问题。但是在哪里?

这是我在python中导入MySQLdb时的错误:

>>> import MySQLdb
    /Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg/_mysql.pyc, but /Users/phoebebr/Downloads/MySQL-python-1.2.3c1 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.6-universal/egg/_mysql.py", line 7, in <module>
      File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 6, in __bootstrap__
    ImportError: dlopen(/Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): no suitable image found.  Did find:
        /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: mach-o, but wrong architecture

我正在尝试 64 位,所以在这里检查:

file $(which python)
/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc
file $(which mysql)
/usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64

已将我的默认 python 版本设置为 2.6

python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

尝试删除构建目录和 python setup.py clean 重命名了 Python/2.5/site-packages,因此它无法尝试获取它。

更新

删除所有内容并按照此处的说明进行操作:Django + MySQL on Mac OS 10.6.2 Snow Leopard 使用 macports 安装。

但基本上还是报同样的错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so, 2): no suitable image found.  Did find:
    /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so: mach-o, but wrong architecture
>>> 

【问题讨论】:

  • 您的 _mysql.so in /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so)是错误的架构(很可能是 32 位)。你快到了。 :)
  • 遗憾的是,尝试从源代码重建导致错误 The-Black-Book-2:MySQL-python-1.2.3 phoebebr$ ARCHFLAGS='-arch x86_64' python setup.py build sh: mysql_config: command not found 卸载了所有的macports安装并再次从头开始重新安装,希望这次所有版本都匹配。
  • OK 卸载了所有 macports 安装,删除了我硬盘上与 mysql 相关的所有内容。从 mysql 站点上的包中安装 mysql,下载 python-mysql 并使用我最初使用的相同指令构建它,只是这次它起作用了。不知道这次有什么不同,但它正在起作用......感谢 jdinuncio 和 belvoir - 你们都是对的,但必须选择一个,所以选择了第一个回应的人!希望这没问题。
  • 从昨晚开始,我一直在使用 MySQLDB。我的配置:Mac OS X 10.5.8;蟒蛇2.5;已使用 DMG 下载并安装了 64 位 MySQL;使用他们的自述文件安装 MySQLDB;我得到了问题中提到的错误。在其他网站上尝试了不同的方法。 Pekka Toiminen 2 月 22 日 17:08 发表的最后一篇文章中的解决方案对我有用。谢谢!

标签: python mysql installation


【解决方案1】:

当解释器说是:

您已在 /Library/Python/2.6/site-packages 中安装 MySQL_python-1.2.3c1 但是您正在 /users/phoebebr/Downloads 中向 sys.path 添加另一个版本。 当我尝试从第二个目录导入 MySQLdb 时,我发现 _mysql.so 来自另一个架构。

所以,您似乎以错误的 MySQLdb 版本结束。删除 /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp 和 /Users/phoebebr/Downloads/MySQL-python-1.2.3c1。再次测试看版本是否 在 /library 作品中。如果没有,请下载 MacOS 的二进制文件。最后,下载 MySQL-python源码并编译。

【讨论】:

  • 感谢您的翻译和建议。我已经删除了 /Users/phoebebr 中的两个项目,但是每次我进入 python 并尝试导入命令时,它都会重新创建 /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-再次universal.egg-tmp文件!看过 sys.path 并且那里没有对这条路径的引用。还可以设置什么其他的路径来混淆它?
  • 哦,这很奇怪。我不熟悉 MacOS 中的 python,但最初的原因仍然存在。 /Library... 中的包似乎是架构错误的包。删除它,下载新版本并重新安装。
  • 这快把我逼疯了。删除所有内容并使用 sudo easy_install-2.6 -m mysql-python 重新安装,它再次创建了 /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp 。再次删除所有内容并尝试从下载中构建,使用说明cd34.com/blog/tag/mysql-python,它仍然重新创建 (&&*&^ /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2. 6-macosx-10.6-universal.egg-tmp。又过了一整晚,我把它收拾起来了。Aghhhh。
【解决方案2】:

这是在黑暗中拍摄 - 不熟悉 MACOSX - 但我在 Linux 下看到了类似的问题,只能通过以下方式解决:

  1. 通过包管理器卸载所有 MySQLdb 组件
  2. 进行低级别搜索以定位与 MySQLdb 相关的任何剩余目录和文件 - 如果您手动安装/构建 MySQLdb,您可能会在某处找到一些对它的引用,但最有可能在 site-packages 目录中 - 我做了并且只是删除它们是根据我所做的研究推荐的方法

接下来我尝试导入 MySQLdb,并确保我得到了一个简单的错误,即包不存在 - 至少我知道 MySQLdb 已 100% 被删除

如果存在该选项,我将通过包管理器进行全新安装,因为它将与您的平台和库 100% 兼容。编译等很棒,但你必须做大量的工作以确保你有正确的 MySQL 客户端库等链接到(基于我的痛苦经验)

祝你好运。

最坏的情况......你可以使用替代 PyMySQL 纯 python 选项 (http://pypi.python.org/pypi/PyMySQL/0.2) 但我不得不承认大多数人推荐 MySQLdb

【讨论】:

  • 是的,重新开始(再次,再次)选项似乎正在工作。完全删除了与 python 和 mysql 相关的所有内容并重新安装。使用来自 mysql 站点的 mysql 包并构建了 python-mysql(按照此处的说明cd34.com/blog/tag/mysql-python),到目前为止一切顺利。因为这正是我第一次做的事情,所以有点令人沮丧!
  • 你看到这些了吗……brainfault.com/2008/04/18/…mangoorange.com/2008/08/01/… 祝你好运……学习 C 编程可能会更快!
  • 一切正常,因为我又从头开始了。在上面添加了评论。现在确定选择哪个答案,因为你们都是对的!
【解决方案3】:

我有另一个可能的解决方案要添加。

我通过在.profile 中添加以下行解决了这个问题(.bash_profile 如果是开发机器就可以):

export VERSIONER_PYTHON_PREFER_64_BIT=yes
export VERSIONER_PYTHON_PREFER_32_BIT=no

(不过,可能不需要第二行。但经过数小时的摆弄、尝试、重新编译,我再也懒得尝试这个了)。

【讨论】:

    【解决方案4】:

    我有一台全新的 MacBook Air,我通过执行以下操作设法让 MySQLdb 正常工作: (雪豹10.6.6,预装Python)

    uname -a
    Darwin Braindamage.local 10.6.0 Darwin Kernel Version 10.6.0: Wed Nov 10 18:13:17 PST 2010; root:xnu-1504.9.26~3/RELEASE_I386 i386
    

    从 mysql 页面下载 MySQL 32 位 dmg 文件,安装它。

    将以下行添加到您的 ~/.profile(或 ~/.bash_profile)中:

    PATH="/usr/local/mysql/bin:${PATH}"
    export PATH
    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
    export VERSIONER_PYTHON_PREFER_64_BIT=no
    export VERSIONER_PYTHON_PREFER_32_BIT=yes
    

    保存后,在终端输入以下内容: 来源 ~/.profile

    下载 MySQL-python-1.2.3.tar.gz 解压、untar、cd 到那个目录

    python2.5 setup.py build
    sudo python2.5 setup.py install
    

    退出该目录(否则您会收到警告)

    python2.5
    import MySQLdb
    

    python
    import MySQLdb
    

    按应有的方式工作!!

    【讨论】:

    • 这很清楚,谢谢。我认为关键是安装 32 位版本的 MySQL,以便与 Python 配合得很好。我已经尝试了几个小时才能让它工作,在放弃 64 位之后,事情变得更加顺利。
    • 非常感谢您提供本指南。 .profile 部分显然是我所缺少的。
    • 在OX 10.8.2上运行良好,接口版本为MySQL-python-1.2.4。非常感谢。
    • 对我不起作用 - 仍然得到 /Users/kellyfj/.python-eggs/MySQL_python-1.2.5-py2.7-macosx-10.7-x86_64.egg-tmp/_mysql.so: mach-o,但架构错误
    【解决方案5】:

    这是因为你的 Python 是 32 位的,但不知何故,安装的 MySQL 库是 64 位的。为了解决这个问题,在这里您可以使用以下命令手动安装它:

    wget http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
    tar xvf MySQL-python-1.2.3.tar.gz
    cd MySQL-python-1.2.3
    ARCHFLAGS="-arch i386" python setup.py install
    

    使用 ARCHFLAGS="-arch i386",它应该被编译为 i386 架构。

    【讨论】:

      【解决方案6】:

      通过选择正确的 python 版本为我解决了这个问题。如果您使用 macports 安装:

      sudo port select python python26
      

      【讨论】:

        【解决方案7】:

        尽管有很多答案,但我只是在同一个问题上苦苦挣扎,所以我会冒险添加另一个:

        • 运行python -c 'import platform; print platform.platform()'。它是否以“64 位”结尾?
        • ls -l /usr/local/mysql。这是一个符号链接:它是否以“x86_64”结尾?

        如果 python 说“64 位”,那么您需要 mysql 来表示“x86_64”(在 http://dev.mysql.com/downloads/mysql/ 搜索)。如果python说“32位”,那么你可能想要“x86”mysql。如果您有匹配项,但仍然无法正常工作,请阅读其他答案(关于 VERSIONER_PYTHON_PREFER_32_BIT 等)

        对我来说,不匹配导致了"mach-o, but wrong architecture" 错误。下一个错误是"Library not loaded: libmysqlclient.18.dylib... Reason: image not found"

        要解决这个问题,我建议添加一个符号链接(而不是设置 DYLD_LIBRARY_PATH,如其他答案中所述):

        sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/
        

        【讨论】:

          【解决方案8】:

          看来此问题与您在包装盒上使用的 mysql 版本有关。在编译 python mysql 组件时,它使用通常位于 /usr/local/mysql/bin 中的 mysql_config 来确定在编译 mysql 组件时要传递给 CC 的标志。如果你运行的是 32 位版本的 mysql,那么即使你有 64 位版本的 python,你也会得到这个组件的 32 版本。例如,我有以下版本的 mysql...

          /usr/local/mysql-5.5.16-osx10.6-x86 我应该一直在运行... /usr/local/mysql-5.5.16-osx10.6-x86_64

          在我的机器上切换到 64 位版本的 mysql 然后运行... sudo pip install mysql-python

          为我解决了这个问题。您可以运行以下命令来验证它将如何构建 mysql 组件...

          /usr/local/mysql/bin/mysql_config --cflags

          你应该看到这样的东西......

          -I/usr/local/mysql/include -Os -g -fno-common -fno-strict-aliasing -arch x86_64

          【讨论】:

            【解决方案9】:

            我遇到了同样的问题。

            • 我的情况:Mac OSX 10.6,python是64位,mysql是32位,_mysql.so是32位。

            • 解决方法:卸载mysql(http://steveno.wordpress.com/2009/03/26/uninstall-mysql-on-mac-os-x/),安装64位mysql。然后确保 mysql_config 指向您刚刚安装的那个。

            重要提示:
            删除 MySQL-python-1.2.3 目录中的所有 _mysql.so (这是您下载的),或者只是删除整个目录并从 tar 文件中再次生成它。然后再次构建并安装。那么 _mysql.so 将是 64 位的。现在你可以导入它了。如果看到dyld: Library not loaded,则导出DYLD_LIBRARY_PATH=/usr/local/mysql/lib

            【讨论】:

              【解决方案10】:

              我在 Mac OS X 和 Ubuntu 中使用 MySQLdb 时遇到了同样的问题,所以我切换到了官方的 MySQL Python 连接器:(在 PyPI 上可用):

              sudo pip install mysql-connector-python
              

              或从以下网址下载: http://dev.mysql.com/downloads/connector/python/

              文档: http://dev.mysql.com/doc/refman/5.5/en/connector-python.html

              它易于使用,并且与 PEP 249(Python DB API 版本 2.0)兼容。

              【讨论】:

                【解决方案11】:

                附加说明以明确问题:

                错误信息是:

                ImportError: dlopen(/Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): no suitable image found.  Did find:
                    /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: mach-o, but wrong architecture
                

                ma​​ch-o, but wrong architecture 错误意味着 python_mysql.so 具有不同的架构(32-bit/64-位二进制)。我们可以通过以下方式检查:

                file $(which python)
                file /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so
                

                如果它们不匹配,我们应该让它们匹配。对我来说,我的 _mysql.so 是 32 位的(我碰巧安装了 32 位的 mysql),而我的 python2.7 默认运行在 64 位。我通过以下方式强制 python 以 32 位运行:

                export VERSIONER_PYTHON_PREFER_32_BIT=yes
                

                问题解决了。

                python 2.6+可以在64位或32位模式下运行,查看How do I determine if my python shell is executing in 32bit or 64bit mode on OS X?

                【讨论】:

                  【解决方案12】:

                  我的 ElCaptain Mac 遇到了同样的问题,并在另一个 post 之后解决了这个问题。只需使用 brew 即可解决您的问题。

                  【讨论】:

                    猜你喜欢
                    • 2013-02-05
                    • 2013-12-02
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-10-09
                    • 2011-10-22
                    • 1970-01-01
                    • 2020-11-26
                    • 2017-06-12
                    相关资源
                    最近更新 更多