2010-02-09 5 views
2

Je veux commencer à essayer de développer quelques applications simples avec PyObjC. J'ai installé PyObjC et les modèles Xcode. Je sais que PyObjC fonctionne, puisque j'ai exécuté this script avec succès. Quand j'ai essayé de créer un projet à partir du modèle d'application Cocoa-Python et couru, je suis arrivé cette erreur:PyObjC + Xcode 3.2 + Non-Apple 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.'

Quand j'ai essayé d'ouvrir une invite de Python normal et l'importation itertools, il n'y avait pas d'erreur. J'utilise Python 2.6.4 de MacPorts sous Mac OS X 10.6 Snow Leopard.

J'apprécierais toute aide.

+0

Très bien, je ne suis pas seul avec PyObjC + Xcode 3.2 + Non-Apple Python :) – Sney

Répondre

3

Vous avez un problème de 32 bits par rapport à 64 bits. Il semble que vous utilisiez un Python 2.6 installé à partir de MacPorts et apparemment ce n'était pas une version universelle (32 bits/64 bits). Soit votre application fonctionne en 64 bits et le Python est seulement en 32 bits ou l'inverse. Vous pouvez vérifier à l'aide 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 

Le moyen le plus correctif est susceptible de réinstaller le MacPorts Python et les paquets supplémentaires que vous avez installés comme PyObjC:

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

EDIT: Puisque vous signaler que le Python est 64 bits, le problème est presque certainement dû à un problème avec la configuration du template Xcode pour votre projet Python PyObjC. Le code de démarrage charge probablement l'interpréteur Python fourni par Apple qui est universel. Vous pouvez vérifier en ajoutant quelque chose comme ça avant la :

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

Pour MacPorts, il devrait être

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

Je ne suis pas assez familier avec les tenants et les aboutissants de l'utilisation des modèles sous Xcode pour savoir ce qui pourrait devoir être changé et je doute que beaucoup de gens les utilisent avec un MacPorts Python, surtout sous 10.6.

Une autre pensée, le Python 2.6.1 Apple-supposé est livré avec une version de PyObjC déjà installée. Peut-être que l'utiliser serait plus simple. Ou n'utilisez pas Xcode et utilisez py2app ou une autre solution pour l'exécuter.

+0

J'ai vérifié les architectures sur itertools.so, et il semble que ce soit 64 bits: 'itertools.so: Mach-O 64- bit bundle x86_64' Quand j'ai essayé ceci sur l'exécutable Python, c'était aussi 64 bits: 'python: Mach-O 64-bit exécutable x86_64' – icktoofay

+0

Voir EDIT pour des suggestions supplémentaires. –

+0

La raison pour laquelle j'utilise un Python non-Apple est que 2.6.1 a eu un bug qui a causé une erreur de segmentation dans quelques uns de mes scripts, donc j'ai dû mettre à jour, et Apple ne met à jour vraiment leurs versions Python nouvelle version du système d'exploitation. Aussi, PIL est un peu ennuyeux de travailler avec Python.org Python, alors j'ai juste opté pour le paquetage py26-pil de MacPorts, qui avait tout ce dont j'avais besoin ... jusqu'à ce que je découvre qu'il a des problèmes avec PyObjC et Xcode. – icktoofay

Questions connexes