"нет подходящей архитектуры в универсальной оболочке" проблема в wxPython? - PullRequest
12 голосов
/ 31 августа 2010

Я использую Python 2.7 под Mac OS 10.6.4, и я только что установил wxPython из двоичного файла wxPython2.8-osx-unicode-2.8.11.0-universal-py2.7.dmg.Я получаю странную ошибку в строке import wx в моих скриптах Python.К вашему сведению, я могу просто импортировать модуль wx из PyCrust.Я действительно не вижу, что я сделал неправильно здесь.Может ли кто-нибудь помочь, пожалуйста?

  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

Ответы [ 5 ]

9 голосов
/ 31 августа 2010

Похоже, что модули расширения C, включенные в wxPython 2.7 dmg здесь , являются только 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() не дает точного указания, в какой архитектуре работает Python для нескольких архитектур OS X. Например, при использовании установщика 3-arch python.org для Python 2.7, 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

Надежный способ - проверить sys.maxint для Python 2 или sys.maxsize для Python 3.

Вы не указываете в своем вопросе, как вы вызываете Python. Это через строку shebang в файле сценария? Если это так, возможно, вы не используете Python, как вы думаете. Кроме того, вы не указываете, какой Python 2.7 вы установили. Например, в настоящее время есть два установщика для Python 2.7 из python.org: один поддерживает 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.

4 голосов
/ 27 марта 2011

Просто чтобы прояснить предложение «Неда Дейли»: используйте arch -i386 python2.7 script.py для запуска в 32-битном режиме. Точная командная строка: arch -i386 python pywrap spare.py . Это позволит вам запустить PyCrust (в 32-битном режиме на OSX 10.6.x).

2 голосов
/ 25 июня 2011

Есть два файла для 32-битной системы, python2.7-32 и pythonw2.7-32.Вы можете использовать эти два файла для запуска вашего скрипта.

Я связываю python с python2.7-32 и связываю pythonw с pythonw2.7-32.Все мои скрипты работают хорошо.

Вы можете попробовать.

1 голос
/ 09 августа 2013

На этой странице можно найти пробный выпуск с поддержкой 64-битного Какао со значением http://downloads.sourceforge.net/wxpython/wxPython2.9-osx-2.9.4.0-cocoa-py2.7.dmg: http://www.wxpython.org/download.php#stable

Это сработало для меня.

0 голосов
/ 31 августа 2010

Как вы установили python на Snow Leopard OSX (10.6) Series?Ваш Python скомпилирован для 64-битной или 32-битной.

Попробуйте сделать следующее:

import platform
print platform.architecture()

Проверьте, был ли двоичный файл (wxpython dmg) скомпилирован для 32 или 64-битной.Возможно, вам придется искать пакет, который совместим с вашей архитектурой, или вам может потребоваться компилирование из исходного кода на вашем компьютере.

Я бы посоветовал вам использовать macports.

  1. установить macports с macport.org
  2. sudo / opt / local / bin / port установить python27
  3. sudo / opt / local / bin / port установить python_select
  4. sudo / opt / local / python_select python27
  5. sudo / opt / local / bin / port install py27-wxpython

, и это должно работать для вас!

...