2010-08-31 16 views
12

Używam Pythona 2.7 w Mac OS 10.6.4, a właśnie zainstalowałem wxPython z pliku binarnego wxPython2.8-osx-unicode-2.8.11.0-universal-py2.7.dmg. Dostaję dziwny błąd na linii import wx w moich skryptach Pythona. FYI, mogę zaimportować moduł wx dobrze od PyCrust. Naprawdę nie widzę, co tutaj zrobiłem źle. Czy ktoś mógłby ci pomóc?"Brak pasującej architektury w uniwersalnym opakowaniu" problem w wxPythonie?

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

Wydaje się, że istnieje bardziej aktualne rozwiązanie tego problemu [tutaj] (http://stackoverflow.com/questions/9205317/how-do-i-install-wxpython-on-mac-os- x). – senderle

Odpowiedz

9

Wygląda na to, że moduły rozszerzeń C dołączone do wxPython 2.7 dmg here są tylko 32-bitowe.

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

Niestety platform.architecture() nie daje dokładne wskazanie, którego łuk OS X wielokrotnego architekturę Python jest uruchomiony. Na przykład, przy użyciu 3-arch Python.org instalator dla Pythona 2.7, platform.architecture() zawsze informuje 64- nieco nawet podczas pracy w trybie 32-bitowym:

$ 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 

niezawodny sposób jest zbadanie sys.maxint dla Pythona 2 lub sys.maxsize dla Pythona 3.

nie wskazują na twoje pytanie, w jaki sposób powołujesz się na Python. Czy to za pośrednictwem linii shebang w pliku skryptowym? Jeśli tak, możesz nie uruchamiać Pythona, o którym myślisz, że jesteś. Ponadto nie wskazujesz, który Python 2.7 zainstalowałeś. Na przykład obecnie istnieją dwa instalatory dla Pythona 2.7 z python.org: jeden obsługuje zarówno 32-, jak i 64-bitowe wykonanie, drugi to tylko 32-bit. Spróbuj wykonać następujące czynności:

$ 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 

więc: jeśli masz wersję multi-arch Pythona, trzeba zmusić go do pracy w trybie 32-bitowym, aby skorzystać z pre-kompilowane wxPython.

+0

Uruchamiam skrypt Pythona ze zwykłego okna terminala, tj. '$ Python script.py'. Importowanie odbywa się w zwykły sposób, na samym początku skryptu. Drukowanie sys.maxint daje 9223372036854775807, więc myślę, że jestem uruchomiony w trybie 64-bitowym. Oto, co otrzymuję, gdy próbuję ostatni bit: ../Python: Uniwersalny binarny Mach-O z 3 architekturami ../Python (dla architektury i386): \t Plik wykonywalny Mach-O i386 ../Python (dla architektura ppc7400) Plik wykonywalny Mach-O ppc ../Python (dla architektury x86_64): 64-bitowy plik wykonywalny Mach-O x86_64 – c00kiemonster

+0

Właśnie sprawdziłem drugi komputer, w którym wxPython działał poprawnie, sys.maxint pokazuje, że działa on 32-bitowo. Jak zmusić Pythona do uruchomienia trybu 32-bitowego? – c00kiemonster

+7

Powinieneś być w stanie użyć 'arch -i386 python2.7 script.py', aby uruchomić w trybie 32-bitowym. Jeśli okaże się to kłopotliwe i nie potrzebujesz innych funkcji 64-bitowych, możesz pobrać i zainstalować inny instalator python.org 2.7 (ten oznaczony 10.3 i wyżej). To spowoduje nadpisanie istniejącej instalacji python2.7 tylko 32-bitową. Może być konieczne ponowne zainstalowanie wxPython później. –

0

Jak zainstalowałeś Pythona w systemie Snow Leopard OSX (10.6) Series? Czy Twój python jest skompilowany dla wersji 64-bitowej lub 32-bitowej?

Spróbuj wykonać następujące czynności:

import platform 
print platform.architecture() 

sprawdzić, czy binarny (wxPython dmg) została opracowana dla 32 lub 64 bit. Może być konieczne wyszukanie pakietu zgodnego z architekturą lub kompilacja ze źródła na komputerze.

Proponuję użyć Macports.

  1. zainstalować MacPorts z macport.org
  2. sudo/opt/local/bin/Port zainstalować python27
  3. sudo/opt/local/bin/Port zainstalować python_select
  4. sudo/opt/local/python_select python27
  5. sudo/opt/local/bin/Port zainstalować py27-wxPython

i to powinno pracować dla Ciebie!

+0

Wygląda na to, że mam zainstalowany 32-bitowy Python. Pliki binarne wxPython mac nie mówią nic o 32 vs 64-bitowym. Ale dziwne jest to, że wxPython działa dobrze na moim drugim macu, z identycznym systemem i instalacją. Tylko ten konkretny komputer wywołuje fuzz. – c00kiemonster

+0

Wystarczy sprawdzić architekturę na innym Macu. Proponuję użyć Macports. Działa dobrze, ponieważ zarówno Python, jak i Wxpython są kompilowane na twoim komputerze. Dzięki temu możesz przełączyć się z python26, 27 i 3! – pyfunc

+0

Dziwne jest to, że oba są takie same, tj. 32-bitowe. Może powinienem dać Macportom szansę. – c00kiemonster

4

Tylko w celu wyjaśnienia sugestii "Ned Deily" ponownie: użyj arch -i386 python2.7 script.py, aby działał w trybie 32-bitowym. Dokładna linia poleceń to arch -i386 python pywrap spare.py. Umożliwi to uruchomienie PyCrust (w trybie 32-bitowym w systemie OSX 10.6.x).

2

Istnieją dwa pliki dla systemu 32-bitowego, python2.7-32 i pythonw2.7-32. Możesz użyć tych dwóch plików do uruchomienia skryptu.

Łączę pytona z python2.7-32 i pythonw łącza do pythonw2.7-32. Moje skrypty działają dobrze.

możesz spróbować.

Powiązane problemy