2010-08-31 1 views
12

Ich benutze Python 2.7 unter Mac OS 10.6.4, und ich habe gerade WxPython aus der wxPython2.8-osx-unicode-2.8.11.0-universal-py2.7.dmg Binärdatei installiert. Ich bekomme einen seltsamen Fehler in der import wx Zeile in meinen Python-Skripten. Zu Ihrer Information, ich kann das wx-Modul einfach aus PyCrust importieren. Ich sehe nicht wirklich, was ich hier falsch gemacht habe. Könnte jemand bitte helfen?"Keine passende Architektur in universellen Wrapper" Problem in WxPython?

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 
+1

Es scheint dieses Problem [hier] eine mehr up-to-date Lösung zu sein (http://stackoverflow.com/questions/9205317/how-do-i-install-wxpython-on-mac-os- x). – senderle

Antwort

9

Es scheint, dass C-Erweiterungsmodule, die mit dem wxPython 2.7 dmg here enthalten sind, nur 32-Bit sind.

$ 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 
... 

Leider hat platform.architecture() keine genaue Angabe, welche geben Bogen ein OS X mehrere Architektur Python in ausgeführt wird. Zum Beispiel mit dem 3-Bogen python.org Installer für Python 2.7, platform.architecture() immer berichtet 64- Bit, auch wenn im 32-Bit-Modus:

$ 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 

Die zuverlässige Art und Weise sys.maxint für Python 2 oder sys.maxsize für Python 3.

Sie zeigen nicht zu untersuchen ist in Ihre Frage, wie Sie Python aufrufen. Ist es über eine Shebang-Zeile in einer Skriptdatei? Wenn das der Fall ist, darfst du nicht den Python laufen lassen, von dem du denkst, dass du es bist. Außerdem geben Sie nicht an, welches Python 2.7 Sie installiert haben. Zum Beispiel gibt es derzeit zwei Installer für Python 2.7 von python.org: Einer unterstützt sowohl 32- als auch 64-Bit-Ausführung, der andere ist nur 32-Bit. Versuchen Sie Folgendes:

$ 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 

Also: Wenn Sie ein Multi-Arch-Version von Python haben, werden Sie es zwingen, müssen in 32-Bit-Modus zu laufen Verwendung der vorkompilierte WxPython zu machen.

+0

Ich führe das Python-Skript aus einem regulären Terminal-Fenster, d. H. "$ Python script.py". Der Import erfolgt auf reguläre Weise, gleich zu Beginn des Skripts. Drucken sys.maxint gibt 9223372036854775807 also ich denke, ich bin im 64-Bit-Modus ausgeführt. Dies ist, was ich bekomme, wenn ich das letzte Bit versuche: ../Python: Mach-O Universal-Binär mit 3 Architekturen ../Python (für Architektur i386): \t Mach-O ausführbar i386 ../Python (für Architektur ppc7400) Mach-O ausführbare ppc ../Python (für Architektur x86_64): Mach-O 64-Bit ausführbare x86_64 – c00kiemonster

+0

ich habe nur den anderen mac wo wxPython fein gearbeitet, sys.maxint zeigt, dass es 32-Bit ausgeführt wird. Wie kann ich Python dazu zwingen, den 32-Bit-Modus auszuführen? – c00kiemonster

+7

Sie sollten 'arch -i386 python2.7 script.py' verwenden, um im 32-Bit-Modus zu laufen. Wenn sich dies als problematisch erweist und Sie ansonsten keine 64-Bit-Funktionen benötigen, können Sie das andere python.org 2.7-Installationsprogramm (das mit 10.3 und höher gekennzeichnete Programm) herunterladen und installieren. Das überschreibt Ihre bestehende python2.7-Installation mit einer einzigen 32-Bit-Installation. Eventuell müssen Sie das wxPython danach neu installieren. –

0

Wie haben Sie Python auf Snow Leopard OSX (10.6) Series installiert? Ist Ihr Python für 64 Bit oder 32 Bit kompiliert?

Versuchen Sie Folgendes tun:

import platform 
print platform.architecture() 

prüfen, ob die binäre (wxpython dmg) wurde für 32 oder 64 Bit zusammengestellt. Möglicherweise müssen Sie nach einem Paket suchen, das mit Ihrer Architektur kompatibel ist, oder Sie müssen möglicherweise von der Quelle auf Ihrem Computer kompilieren.

Ich würde vorschlagen, dass Sie Macports verwenden.

  1. installieren Macports von macport.org
  2. sudo/opt/local/bin/Port installieren python27
  3. sudo/opt/local/bin/Port installieren python_select
  4. sudo/opt/local/python_select python27
  5. sudo/opt/local/bin/Port installieren py27-wxpython

und dies sollte für Sie arbeiten!

+0

Ich habe Python 32 Bit installiert. Die wxPython-Mac-Binärdateien sagen nichts über 32 gegen 64 Bit. Aber das Seltsame ist, dass WxPython läuft gut auf meinem anderen Mac, mit identischem System und Installation. Nur dieser eine bestimmte Computer macht einen Fuzz. – c00kiemonster

+0

Überprüfen Sie einfach die Architektur auf dem anderen Mac. Ich würde vorschlagen, die Macports zu verwenden. Es funktioniert gut, da sowohl Python als auch Wxpython auf Ihrem Computer kompiliert sind. Auch damit können Sie von python26, 27 und 3 wechseln! – pyfunc

+0

Die seltsame Sache ist, dass sie beide gleich sind, d. H. 32 Bit. Vielleicht sollte ich dann Macports ausprobieren. – c00kiemonster

4

Nur um 'Ned Deilys' Vorschlag zu verdeutlichen re: Verwenden Sie arch -i386 python2.7 script.py im 32-Bit-Modus zu laufen. Die genaue Befehlszeile lautet arch -i386 python pywrap reserver.py. Dadurch können Sie PyCrust ausführen (im 32-Bit-Modus unter OSX 10.6.x).

2

Es gibt zwei Dateien für 32-Bit-System, python2.7-32 und pythonw2.7-32. Sie können diese beiden Dateien verwenden, um Ihr Skript auszuführen.

Ich verbinde Python zum python2.7-32 und Link pythonw zum pythonw2.7-32. Meine Skripte funktionieren alle gut.

können Sie versuchen.

Verwandte Themen