Подтвердить что ты не робот

WxPython Несовместим со снежным барсом?

Недавно я обновился до Snow Leopard, и теперь я не могу запускать программы, созданные с помощью wxPython. Я получаю ошибки (от 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)

Я действительно не понимаю их и буду признателен, если вы поможете мне это сделать, также, если вы знаете, что происходит, как я могу их исправить? Может быть, это связано с тем, что Snow Leopard 64-бит?

Спасибо!!

4b9b3361

Ответ 1

Проблема заключается в том, что WxPython доступен только на Mac в 32-битном режиме; однако по умолчанию Python запустится в 64-битном режиме. Чтобы устранить эту проблему, создайте следующую оболочку script с именем python_32:

#! /bin/bash
export VERSIONER_PYTHON_PREFER_32_BIT=yes
/usr/bin/python "[email protected]"

Сделайте исполняемый файл script (chmod a+x python_32) и поместите script в свой путь. Теперь просто вызовите python_32, чтобы получить интерактивную консоль Python, в которой вы можете использовать WxPython. Если вы хотите написать Python script, который использует это, вы можете использовать shebang: #! /usr/bin/env python_32.

Теперь, чтобы объяснить... основная проблема заключается в том, что 32-разрядный и 64-разрядный код использует другой двоичный интерфейс приложения (ABI), и поэтому 32-разрядный код и 64-разрядный код не могут сосуществовать в одной и той же библиотеке/исполняемый файл/процесс. Чтобы поддерживать 64-битный режим, он должен быть скомпилирован в 64-битном режиме; аналогично, чтобы поддерживать 32-битный режим, его необходимо скомпилировать в 32-битном режиме. В OS X возможно использование универсальных двоичных файлов для поддержки обоих... однако его необходимо скомпилировать в обоих режимах (а затем объединить). WxWidgets, вероятно, использует Carbon, который доступен только в 32-битном режиме (Cocoa доступен как в 32-битном, так и в 64-битном режиме... Apple не беспокоилась о том, что Carbon доступен в обоих режимах, поскольку он устарел), что объясняет, почему WxPython, в свою очередь, может быть предоставлен только в 32-битном режиме. Это, в свою очередь, означает, что использование этого в Python требует, чтобы вы запускали Python в 32-битном режиме (Python - универсальный двоичный код с 32-разрядными и 64-битными версиями, доступными в том же двоичном файле, так что это может быть запущен в любом режиме).

Альтернативный вариант
Я не рекомендую это делать, потому что я думаю, что вы должны оставить значения по умолчанию такими, какими они есть, но поскольку у вас может не быть достаточного знания сценариев оболочки (вам нужно использовать "./python_32" или поместить его в папку, указанную в переменную окружения "$ PATH" и вызывать ее как "python_32" ), чтобы следовать первому варианту, вы можете просто выполнить следующую команду, которая по умолчанию сделает 32-разрядный режим:

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

Если вы решите вернуться в 64-битный режим, вы можете использовать следующую команду:

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

Обратите внимание, что обе команды должны выполняться в терминале (не внутри Python).

Источник
Я должен указать, что обе рекомендации основаны на man python на Mac OS X. Так что, если у вас есть другие вопросы, вы обязательно должны прочитать как сообщение об ошибке побудило вас сделать.

Ответ 2

Пока я вижу, что это уже ответили, ответ немного ошибочен. У серии 2.9 есть 64-разрядная версия Mac, хотя и для Python 2.7. См. http://wxpython.org/download.php и найдите конструкцию Cocoa. Из того, что я собираю в списке рассылки wxPython и IRC-канале, вы захотите загрузить 64-битную сборку Python с python.org, а не использовать змею, включенную в Mac.

Ответ 3

Вы также можете попробовать выполнить команду arch при вызове python: arch -i386 /usr/bin/python2.6, если вы не можете запустить Python с правильными настройками среды. Коммутатор "-38" обеспечивает универсальный двоичный запуск в 32-разрядном режиме Intel. '-x86_64' запускает его в 64-разрядном режиме Intel. -ppc и -ppc64 для архитектуры PPC.

Если вы все еще получаете ошибки, это может указывать на проблему с компиляцией. На моей машине у меня есть яблочный Python и версия из Macports. Команда arch работает с использованием двоичных файлов apple, и я могу успешно импортировать wx из командной строки, но я все еще получаю ошибки из двоичного файла Macports: Bad CPU type in executable Я предполагаю, что мне придется вернуться и перекомпилировать мой Macython python и сделать уверен, что он создает универсальную двоичную систему или что-то в этом роде (вздох).

Ответ 4

Другое решение - загрузить и установить Python 2.6 для OS X из python.org и установить wxPython для OS X из здесь. Теперь python.org 2.6 является более новым (2.6.5), чем поставляемый Apple Python (2.6.1) в Snow Leopard и только 32-разрядный.

Ответ 5

Это сработало для меня (от http://www.python-forum.de/viewtopic.php?f=19&t=24322&view=previous)

В .profile добавьте следующую строку alias py32 = 'arch -i386/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7'

затем вызовите script с помощью py32

Ответ 6

Hm. Предоставленный script не работал у меня - я изменил его следующим образом:

#! /bin/bash
echo "-----------------Python 2.6 - 32 Bit setup --------------------"
echo "Running" $1
export VERSIONER_PYTHON_PREFER_32_BIT yes
/usr/bin/python2.6 $1

Все еще не сработало. Я получаю то же сообщение. Перечитайте страницу руководства, чтобы убедиться, что я не ошибаюсь, и я не буду дальше:

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)

Не уверен, почему это не работает, если не существует какой-то перестройки, которая должна быть выполнена против ядра wx, что дает ему 32/64-разрядную совместимость. Любые предложения, кто-нибудь? Я хотел бы использовать готовый Python-инсталлятор от Apple (проще для моей работы), и я бы хотел избежать более смешных хаков