WxPython Niezgodny Ze Snow Leopardem?

Ostatnio uaktualniłem do Snow Leoparda, a teraz nie mogę uruchamiać programów zbudowanych z wxPython. Błędy jakie dostaję to (z Eclipse + PyDev):

  import wx 
  File "/var/tmp/wxWidgets/wxWidgets-13~231/2.6/DSTROOT/System/Library/Frameworks
  /Python.framework/Versions/2.6/Extras/lib/
  python/wx-2.8-mac-unicode/wx/__init__.py", line 45, in <module>

  File "/var/tmp/wxWidgets/wxWidgets-13~231/2.6/DSTROOT
  /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib
  /python/wx-2.8-mac-unicode/wx/_core.py", line 4, in <module>
  ImportError:/System/Library/Frameworks
  /Python.framework/Versions/2.6/Extras/lib/python
  /wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture 
  (see "man python" for running in 32-bit mode)

Naprawdę ich nie Rozumiem i byłbym wdzięczny, gdybyś mógł mi w tym pomóc, również, jeśli wiesz, co się dzieje, jak mogę je naprawić? Może to ma coś wspólnego z tym, że Snow Leopard jest 64-bitowy?

dzięki!!

Author: Alex, 2010-04-02

6 answers

Problem polega na tym, że wxPython jest dostępny tylko na Macu w trybie 32-bitowym; jednak domyślnie Python uruchomi się w trybie 64-bitowym. Aby rozwiązać ten problem, utwórz następujący skrypt powłoki o nazwie python_32:

#! /bin/bash
export VERSIONER_PYTHON_PREFER_32_BIT=yes
/usr/bin/python "$@"

Uczyń skrypt wykonywalnym (chmod a+x python_32) i umieść skrypt w swojej ścieżce. Teraz po prostu wywołaj python_32, aby uzyskać interaktywną konsolę Pythona, w której możesz używać WxPython. Jeśli chcesz napisać skrypt Pythona, który używa tego, możesz użyć shebang: #! /usr/bin/env python_32.

Teraz do wyjaśnij... podstawowy problem polega na tym, że 32-bitowy i 64-bitowy kod używa innego binarnego interfejsu aplikacji (ABI), a więc 32-bitowy kod i 64-bitowy kod nie mogą współistnieć w tej samej bibliotece/pliku wykonywalnym/procesie. Aby obsługiwać tryb 64-bitowy, musi być skompilowany w trybie 64-bitowym; podobnie, aby obsługiwać tryb 32-bitowy, musi być skompilowany w trybie 32-bitowym. Pod OS X jest to możliwe, używając uniwersalnych binariów do obsługi obu... jednak musi być skompilowany w obu trybach (a następnie połączone). WxWidgets prawdopodobnie używa węgla, który jest dostępny tylko w trybie 32-bitowym (Cocoa jest dostępny zarówno w trybie 32-bitowym, jak i 64-bitowym... Apple nie zawracało sobie głowy udostępnieniem carbonu w obu trybach, ponieważ jest on przestarzały), co wyjaśniałoby, dlaczego WxPython z kolei może być dostępny tylko w trybie 32-bitowym. To z kolei oznacza, że używanie go w Pythonie wymaga uruchomienia Pythona w trybie 32-bitowym (Python jest uniwersalnym binarnym z zarówno 32-bitowymi, jak i 64-bitowymi wersjami samego siebie dostępnymi w tym samym plik binarny, więc może być uruchomiony w obu trybach).

Opcja Alternatywna
Nie polecam tego robić, ponieważ myślę, że powinieneś zostawić domyślne wartości takie, jakie są, ale ponieważ możesz nie mieć wystarczającej wiedzy na temat skryptów powłoki (musisz użyć "./ python_32 "lub umieść go w folderze, który jest wymieniony w zmiennej środowiskowej "$PATH "i wywołaj go jako "python_32") aby podążać za pierwszą opcją, możesz po prostu wykonać następujące polecenie, które sprawi, że 32-bitowy tryb domyślny:

defaults write com.apple.versioner.python Prefer-32-Bit -bool yes

Jeśli zdecydujesz się przełączyć z powrotem do trybu 64-bitowego, możesz użyć następującego polecenia:

defaults write com.apple.versioner.python Prefer-32-Bit -bool no

Zauważ, że oba polecenia mają być wykonywane na terminalu (nie w Pythonie).

źródło
Powinienem zwrócić uwagę, że oba zalecenia są oparte na man python na Mac OS X. Jeśli więc masz jakieś inne pytania, zdecydowanie powinieneś przeczytać stronę podręcznika, ponieważ komunikat o błędzie Cię do tego zachęcał.

 25
Author: Michael Aaron Safyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-13 07:08:33

O ile widzę, że już na to odpowiedziałam, odpowiedź jest nieco błędna. Seria 2.9 ma 64-bitową kompilację Mac, aczkolwiek tylko dla Pythona 2.7. Zobacz http://wxpython.org/download.php i poszukaj kakao. Z tego, co zbieram na liście dyskusyjnej wxPython i kanale IRC, będziesz chciał pobrać 64-bitową kompilację Pythona z python.org zamiast używać dołączonego do Mac węża.

 15
Author: Mike Driscoll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-27 19:12:41

Możesz również spróbować Arch podczas wywoływania Pythona:arch -i386 /usr/bin/python2.6 jeśli nie możesz zmusić Pythona do działania z prawidłowymi ustawieniami środowiska. Przełącznik '- i386 ' umożliwia uniwersalne uruchamianie binarne w trybie Intel 32-bit. '- x86_64 ' sprawia, że działa on w trybie Intel 64-bit. -ppc i-ppc64 jest dla architektur PPC.

Jeśli nadal występują błędy, może to wskazywać na problem z kompilacją. Na moim komputerze mam zapasowy Apple Python i wersję z Macports. Polecenie arch działa przy użyciu Apple binaries i mogę importować WX z powodzeniem z linii poleceń, ale nadal dostaję błędy z pliku binarnego Macports: Bad CPU type in executable zgaduję, że będę musiał wrócić i przekompilować mój plik binarny Pythona Macports i upewnić się, że produkuje uniwersalny plik binarny lub coś w tym stylu (westchnienie).

 2
Author: spade78,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-11 16:58:45

Innym rozwiązaniem jest pobranie i zainstalowanie Pythona 2.6 Dla OS X z python.org i zainstalować wxPython dla OS X z Tutaj z nim. Na python.org 2.6 jest nowszy (obecnie 2.6.5) niż dostarczony przez Apple Python (2.6.1) w Snow Leopardzie i jest tylko 32-bitowy.

 1
Author: Ned Deily,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-02 08:08:14

To mi pomogło (z http://www.python-forum.de/viewtopic.php?f=19&t=24322&view=previous )

W .Profil, Dodaj następujący wiersz alias py32= ' arch - i386/Library/frameworks / Python.framework / Versions/2.7 / bin / pythonw2.7 '

Następnie wywołaj swój skrypt z py32

 1
Author: Prashant John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-27 12:41:47

Hm. Podany skrypt nie zadziałał u mnie-zmieniłem go w następujący sposób:

#! /bin/bash
echo "-----------------Python 2.6 - 32 Bit setup --------------------"
echo "Running" $1
export VERSIONER_PYTHON_PREFER_32_BIT yes
/usr/bin/python2.6 $1
Nadal nie działa. Dostaję tę samą wiadomość. Przeczytaj ponownie stronę podręcznika, aby upewnić się, że nie byłem nieporozumieniem i nie jestem dalej do przodu:
ImportError: /usr/local/lib/wxPython-unicode-2.8.10.1/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode)

Nie jestem pewien, dlaczego to nie działa, chyba że istnieje jakiś rodzaj przebudowy, która musi być wykonana z rdzeniem wx, który daje mu kompatybilność 32/64-bitową. Jakieś sugestie? Chciałbym użyć out-of-the-box Python install od Apple (be łatwiejsze dla mojej pracy), i chciałbym uniknąć kolejnych śmiesznych hacków

 0
Author: Doc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-05 05:21:09