【问题标题】:"no matching architecture in universal wrapper" problem in wxPython?wxPython中的“通用包装器中没有匹配的架构”问题?
【发布时间】:2011-04-06 03:18:44
【问题描述】:

我在 Mac OS 10.6.4 下运行 Python 2.7,我刚刚从 wxPython2.8-osx-unicode-2.8.11.0-universal-py2.7.dmg 二进制文件安装了 wxPython。我的 Python 脚本中的 import wx 行出现了一个奇怪的错误。仅供参考,我可以从 PyCrust 导入 wx 模块。我真的不明白我在这里做错了什么。有人可以帮忙吗?

  File "prod_cons_wx.py", line 6, in <module>
    import wx 
  File "/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/__init__.py", line 45, in <module>
    from wx._core import *
  File "/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core.py", line 4, in <module>
    import _core_
ImportError: dlopen(/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core_.so, 2): no suitable image found.  Did find:
    /usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no matching architecture in universal wrapper

【问题讨论】:

  • 这个问题似乎有更新的解决方案here

标签: python wxpython python-import


【解决方案1】:

现在有一个支持 64 位 Cocoa 的开发版本,地址为 http://downloads.sourceforge.net/wxpython/wxPython2.9-osx-2.9.4.0-cocoa-py2.7.dmg,可在此页面找到:http://www.wxpython.org/download.php#stable

这对我有用。

【讨论】:

    【解决方案2】:

    32位系统有两个文件,python2.7-32和pythonw2.7-32。 您可以使用这两个文件来运行您的脚本。

    我将 python 链接到 python2.7-32 并将 pythonw 链接到 pythonw2.7-32。 我的脚本都运行良好。

    你可以试试。

    【讨论】:

      【解决方案3】:

      只是为了澄清“Ned Deily”的建议:使用 arch -i386 python2.7 script.py 在 32 位模式下运行。 确切的命令行是 arch -i386 python pywrap 备用.py。这将允许您运行 PyCrust(在 OSX 10.6.x 上以 32 位模式运行)。

      【讨论】:

        【解决方案4】:

        wxPython 2.7 dmg here 中包含的 C 扩展模块似乎只有 32 位。

        $ cd /usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.7/site-packages/wx-2.8-mac-unicode/wx
        $ file *.so
        _animate.so:   Mach-O universal binary with 2 architectures
        _animate.so (for architecture ppc): Mach-O bundle ppc
        _animate.so (for architecture i386):    Mach-O bundle i386
        _aui.so:       Mach-O universal binary with 2 architectures
        _aui.so (for architecture ppc): Mach-O bundle ppc
        _aui.so (for architecture i386):    Mach-O bundle i386
        ...
        

        不幸的是,platform.architecture() 没有准确指出 OS X 多架构 Python 在哪个拱门中运行。例如,使用 Python 2.7 的 3-arch python.org 安装程序,platform.architecture() 总是报告 64-即使在 32 位模式下运行时也位:

        $ cd /Library/Frameworks/Python.framework/Versions/2.7
        $ file python2.7
        python2.7: Mach-O universal binary with 3 architectures
        python2.7 (for architecture i386):  Mach-O executable i386
        python2.7 (for architecture ppc7400):   Mach-O executable ppc
        python2.7 (for architecture x86_64):    Mach-O 64-bit executable x86_64
        $ arch -x86_64 ./python2.7 -c 'import platform, sys; print "{0}, {1:x}".format(platform.architecture()[0], sys.maxint)'
        64bit, 7fffffffffffffff
        $ arch -i386 ./python2.7 -c 'import platform, sys; print "{0}, {1:x}".format(platform.architecture()[0], sys.maxint)'
        64bit, 7fffffff
        $ arch -ppc ./python2.7 -c 'import platform, sys; print "{0}, {1:x}".format(platform.architecture()[0], sys.maxint)'
        64bit, 7fffffff
        

        可靠的方法是检查 Python 2 的 sys.maxint 或 Python 3 的 sys.maxsize

        您没有在问题中说明如何调用 Python。是通过脚本文件中的 shebang 行吗?如果是这样,您可能没有运行您认为的 Python。此外,您没有指明您安装了哪个 Python 2.7。例如,python.org 目前有两个 Python 2.7 安装程序:一个支持 32 位和 64 位执行,另一个仅支持 32 位。请尝试以下操作:

        $ file $(python2.7 -c 'import sys;print(sys.executable)')
        /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: Mach-O universal binary with 3 architectures
        /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python (for architecture i386):   Mach-O executable i386
        /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python (for architecture ppc7400):    Mach-O executable ppc
        /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python (for architecture x86_64): Mach-O 64-bit executable x86_64
        

        所以:如果您有 Python 的多架构版本,则需要强制它以 32 位模式运行以使用预编译的 wxPython。

        【讨论】:

        • 我正在从常规终端窗口运行 python 脚本,即“$ python script.py”。导入以常规方式完成,就在脚本的开头。打印 sys.maxint 给出 9223372036854775807 所以我想我是在 64 位模式下运行的。这是我尝试最后一点时得到的结果:../Python: Mach-O Universal binary with 3 architectures ../Python (for architecture i386): Mach-O executable i386 ../Python (for architecture ppc7400)Mach -O executable ppc ../Python (for architecture x86_64):Mach-O 64-bit executable x86_64
        • 我刚刚检查了 wxPython 工作正常的另一台 mac,sys.maxint 显示它正在运行 32 位。如何强制 python 运行 32 位模式?
        • 您应该可以使用arch -i386 python2.7 script.py 在 32 位模式下运行。如果这被证明很麻烦并且您不需要 64 位功能,您可以下载并安装另一个 python.org 2.7 安装程序(标记为 10.3 及更高版本的安装程序)。这将覆盖您现有的 python2.7 安装只有一个 32 位。之后您可能需要重新安装 wxPython。
        • 用拱形东西运行它工作得很好。但是,stackoverflow.com/questions/2088569/… 的“导出 VERSIONER_PYTHON_PREFER_32_BIT=yes”不起作用。有没有其他方法可以强制python切换到32位?
        • 我刚刚用 32 位二进制文​​件重新安装了 python。它现在工作正常。那里对我来说有点繁琐。非常感谢您的帮助。
        【解决方案5】:

        您是如何在 Snow Leopard OSX (10.6) 系列上安装 python 的? 你的 python 是编译成 64 位还是 32 位的。

        尝试执行以下操作:

        import platform
        print platform.architecture()
        

        检查二进制文件 (wxpython dmg) 是针对 32 位还是 64 位编译的。 您可能需要寻找与您的架构兼容的包,或者您可能需要在您的机器上从源代码编译。

        我建议你使用 macports。

        1. 从 macport.org 安装 macports
        2. sudo /opt/local/bin/port install python27
        3. sudo /opt/local/bin/port install python_select
        4. sudo /opt/local/python_select python27
        5. sudo /opt/local/bin/port install py27-wxpython

        这应该适合你!

        【讨论】:

        • 我似乎安装了 Python 32 位。 wxPython mac 二进制文件没有说明 32 位和 64 位。但奇怪的是 wxPython 在我的另一台 Mac 上运行良好,具有相同的系统和安装。只有这台特定的计算机正在引起轰动。
        • 只需检查另一台 Mac 上的架构即可。我建议使用macports。它工作正常,因为 python 和 wxpython 都是在你的机器上编译的。也有了这个,你可以从python26、27和3切换!
        • 奇怪的是它们都是相同的,即 32 位。或许我应该试试 macports。
        • 注意,platform.architecture() 在 OS X 上通常不能给出准确的结果。有关详细信息,请参阅我的答案。
        猜你喜欢
        • 1970-01-01
        • 2011-12-08
        • 2021-10-26
        • 2021-05-24
        • 2017-04-18
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多