Я использую 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
Похоже, что модули расширения 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()
не дает точного указания на то, в какой архитектуре OS X работает Python. Например, с помощью установщика 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.
Как установить Python на Snow Leopard OSX (10.6) Series? Ваш питон скомпилирован для 64-битной или 32-битной версии.
Попробуйте сделать следующее:
import platform
print platform.architecture()
Проверьте, был ли бинарный файл (wxpython dmg) скомпилирован для 32 или 64 бит. Возможно, вам придется искать пакет, совместимый с вашей архитектурой, или вам придется компилировать исходный код на своем компьютере.
Я бы посоветовал вам использовать macports.
и это должно сработать для вас!