2010-06-16 3 views
1

Je suis en train d'écrire une petite application python qui intègre cherrypy et django en utilisant py2app. Cela a bien fonctionné jusqu'à ce que j'essaie d'inclure pyobjc dans mon projet, car mon application nécessitait une petite interface graphique (qui se compose d'une petite icône dans la barre de menu supérieure + un menu déroulant).py2app, pyObjc & macports erreurs de compilation

Je peux exécuter mon script python sans aucun problème (j'utilise python 2.6 avec macports), mais je ne peux pas lancer le paquet d'application généré par py2app. Une boîte de dialogue apparaît avec le message suivant:

ImportError: 
dlopen(/Users/denis/tlon/standalone/mac/dist/django_cherry.app/Contents/Resources/lib/python2.6/lib-dynload/CoreFoundation/_inlines.so, 2): no suitable image found. 
Did find: 
    /Users/denis/tlon/standalone/mac/dist/django_cherry.app/Contents/Resources/lib/python2.6/lib-dynload/CoreFoundation/_inlines.so: mach-o, but wrong architecture 

J'ai fait un rapide:

sudo port -u install py26-pyobjc +universal 

mais pour certains macports raison essaie de construire OpenSSL, avec laquelle la compilation échoue à chaque fois. Il semble que le problème est lié à zLib - c'est ce qui apparaît dans les journaux:

:info:build ld: warning: in /opt/local/lib/libz.dylib, file is not of required architecture 

... Et voici la sortie de file /opt/local/lib/libz.dylib:


    /opt/local/lib/libz.dylib: Mach-O universal binary with 2 architectures 
    /opt/local/lib/libz.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 
    /opt/local/lib/libz.dylib (for architecture i386): Mach-O dynamically linked shared library i386 

Rien ne ressemble tort de moi.

Je suis un peu coincé ici. Je ne comprends même pas ce que opensy a à voir avec pyObjc, mais il semble que je ne puisse aller nulle part si je n'arrive pas à le compiler. Macports sucer vraiment parfois:/

EDIT je parviens à résoudre problème Macports, mais pas py2app un:/

Répondre

0

Je devine que c'est parce qu'une bibliothèque requise est pas dans votre chemin de la bibliothèque, de sorte que le chargeur peut « t savoir où il en est ainsi, il peut relier les symboles Vous devriez faire une de deux choses:.

  1. Ajouter /opt/local/lib à votre $LD_LIBRARY_PATH variable d'environnement lors du lancement de l'application; ou
  2. Regroupez les bibliothèques appropriées avec le fichier .app.
+0

Merci. En fait, j'ai finalement réussi à compiler et à tout faire fonctionner. Pour résoudre le premier problème d'architecture incorrecte, j'ai trouvé une solution de contournement en remplaçant les librairies pyobjc macports par apple, qui sont pré-installées avec l'os et compilées pour différentes architectures (dans/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC /) J'ai un script bash qui copie tout au bon endroit juste après que le ". – Denis

+1

ne pas modifier votre 'LD_LIBRARY_PATH' !! Si vous devez faire quelque chose de ce genre ... s'en tenir à '$ DYLD_FALLBACK_LIBRARY_PATH'. aussi, le peu connu 'sudo update_dyld_shared_cache' est une gemme, parfois comme ça. –