WxPython, несовместимый с Snow Leopard?

Недавно я обновил до 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-разрядным?

Спасибо!!

18
задан Alex 2 April 2010 в 05:51
поделиться

3 ответа

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

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

Сделайте сценарий исполняемым (chmod a+x python_32) и поместите его в свой путь. Теперь просто вызовите python_32, чтобы получить интерактивную консоль Python, в которой вы можете использовать WxPython. Если вы хотите написать сценарий Python, который использует это, вы можете использовать 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-битной версиями, доступными в одном бинарном файле, поэтому он может быть запущен в любом режиме).

Альтернативный вариант
Я не рекомендую делать это, потому что считаю, что вы должны оставить значения по умолчанию, но поскольку у вас может не хватить знаний по shell-сценариям (вам нужно использовать ". /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. Поэтому, если у вас есть другие вопросы, вам обязательно нужно прочитать страницу man, как вас призывало сделать сообщение об ошибке.

25
ответ дан 30 November 2019 в 06:50
поделиться

Другое решение - загрузить и установить 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-разрядным.

1
ответ дан 30 November 2019 в 06:50
поделиться

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

#! /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 (чтобы упростить мою работу), и я бы хотел избежать новых нелепых хаков

0
ответ дан 30 November 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: