PyObjC + Xcode 3.2 + не Apple Python - PullRequest
       20

PyObjC + Xcode 3.2 + не Apple Python

2 голосов
/ 09 февраля 2010

Я хочу начать пытаться разработать несколько простых приложений с PyObjC.Я установил PyObjC и шаблоны Xcode.Я знаю, что сам PyObjC работает, так как я успешно запустил этот скрипт .Когда я попытался создать проект из шаблона приложения Какао-Python и запустил его, я получил эту ошибку:

Traceback (most recent call last):
  File "main.py", line 10, in 
    import objc
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/__init__.py", line 25, in 
    from _convenience import *
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyObjC/objc/_convenience.py", line 21, in 
    from itertools import imap
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so, 2): no suitable image found.  Did find:
    /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/itertools.so: mach-o, but wrong architecture
2010-02-08 19:40:09.280 TestApplication[3229:a0f] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '/Users/icktoofay/Desktop/TestApplication/main.m:44 main() PyRun_SimpleFile failed with file '/Users/icktoofay/Desktop/TestApplication/build/Debug/TestApplication.app/Contents/Resources/main.py'.  See console for errors.'

Когда я попытался открыть обычное приглашение Python и импортировать itertools, ошибки не было,Я использую Python 2.6.4 из MacPorts на Mac OS X 10.6 Snow Leopard.

Буду признателен за любую помощь.

1 Ответ

3 голосов
/ 09 февраля 2010

У вас 32-битная или 64-битная проблема. Похоже, вы используете Python 2.6, установленный из MacPorts, и, очевидно, это была не универсальная (32-битная / 64-битная) сборка. Либо ваше приложение работает как 64-битное, а Python - только 32-битное, или наоборот. Вы можете проверить, используя file:

cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6/
cd lib/python2.6/lib-dynload/
file itertools.so 
itertools.so: Mach-O universal binary with 2 architectures
itertools.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
itertools.so (for architecture i386):   Mach-O bundle i386

Самым простым исправлением может быть переустановка MacPorts Python и дополнительных пакетов, которые вы установили, например PyObjC:

sudo port selfupdate
sudo port -u install python26 +universal ...

РЕДАКТИРОВАТЬ: Поскольку вы сообщаете, что Python является 64-битным, проблема почти наверняка связана с проблемой настройки шаблона Xcode для вашего проекта Python PyObjC. Код запуска, вероятно, загружает предоставленный Apple интерпретатор Python, который является универсальным. Вы можете проверить, добавив что-то вроде этого до import objc:

import sys
sys.stderr.write(sys.executable)

Для MacPorts должно быть

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python

Я недостаточно знаком с подробностями использования шаблонов под Xcode, чтобы знать, что может потребоваться изменить, и я сомневаюсь, что многие люди используют их с MacPorts Python, особенно под 10.6.

Другая мысль: поддерживаемый Apple Python 2.6.1 поставляется с уже установленной версией PyObjC. Возможно, использовать его будет проще. Или не используйте Xcode и используйте py2app или другое решение для его запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...