Frage

Ich will versuchen, begann ein paar einfache Anwendungen mit PyObjC zu entwickeln. Ich installierte PyObjC und die Xcode-Vorlagen. Ich weiß, dass PyObjC selbst funktioniert, da ich habe laufen dieses Skript erfolgreich. Als ich versuchte, ein Projekt aus der Cocoa-Python-Anwendungsvorlage zu erstellen und es lief, habe ich diesen Fehler:

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

Als ich versuchte, eine normale Python-Prompt öffnen und itertools importieren, es war kein Fehler. Ich verwende Python 2.6.4 von MacPorts auf Mac OS X 10.6 Snow Leopard.

ich Hilfe schätzen würde.

War es hilfreich?

Lösung

Sie haben eine 32-Bit-vs 64-Bit-Problem. Es scheint, dass Sie eine Python 2.6 von MacPorts installiert verwenden, und offenbar war es kein Universal (32-Bit / 64-Bit) zu bauen. Entweder Ihre Anwendung läuft als 64-Bit- und der Python ist nur 32-Bit oder umgekehrt. Sie können überprüfen, indem file mit:

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

Die einfachste Lösung ist wahrscheinlich die MacPorts Python und die zusätzlichen Pakete, die Sie wie PyObjC installiert neu installieren:

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

EDIT: Da Sie berichten, dass die Python 64-Bit ist, dann ist das Problem mit ziemlicher Sicherheit ist aufgrund eines Problems mit dem Xcode Template-Setup für Ihre Python PyObjC Projekt. Der Startup-Code wird geladen wahrscheinlich den von Apple bereitgestellten Python-Interpreter, der universell ist. Sie können überprüfen, indem Sie so etwas wie dies vor dem import objc fügte hinzu:

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

Für MacPorts, sollte es sein

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

Ich bin nicht vertraut genug mit den ins-and-outs von den Vorlagen unter Xcode zu wissen, was geändert werden könnte müssen und ich bezweifle, dass viele Leute sie mit einem MacPorts Python verwenden, insbesondere unter 10.6.

Ein weiterer Gedanke, das Apple-suppied Python 2.6.1 kommt mit einer Version von PyObjC bereits installiert. Vielleicht ist es mit wäre einfacher. Oder verwenden Sie nicht Xcode und Verwendung py2app oder eine andere Lösung, um sie auszuführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top