2010-12-14 2 views
0

En utilisant les modèles Python pour Xcode, j'ai un projet simple fonctionnant sur une machine et échouant sur deux autres, pour des raisons différentes. L'échec est que je résolu même si main.m a:Comment Xcode choisit-il Python à exécuter?

Py_SetProgramName("/usr/bin/python"); 

Le Python en cours d'exécution réelle vu de main.py avec ceci:

import sys 
print sys.version 

est différent. Et le problème était que cet autre Python n'avait pas installé objc. Donc la question est: à court de nettoyer ma machine, comment puis-je diriger Xcode pour utiliser le système Python?

Edit:

Ceci est un problème qui semble comme il est trivial, mais ce n'est pas. Il semble que parce que quand je spécifie Mac OS X 10.5 comme le SDK de base, Xcode lie à ce Python.framework, comme je peux le voir en double-cliquant sur l'icône dans Linked Frameworks dans le projet Xcode.

Chaque version de Python.framework possède une paire clé/valeur dans son Info.plist: CFBundleExecutableName/Python. Heureusement (pour la médecine légale) ce Python dans la version 2.5 lance 2.6.1! Pourtant, en imprimant sys.version (à partir de main.py) ou en espionnant le chargeur (en exportant DYLD_PRINT_LIBRARIES = 1), je peux voir que l'application PyObjC lance réellement Python 2.5.4.

La ligne ci-dessus avec Py_SetProgramName .. est hors de propos --- elle peut être commentée et tout fonctionne bien. Donc, à quoi ça ressemble, c'est que Python.framework contrôle quel Python est lancé, il ne le fait pas comme je le souhaitais, et il peut être contrôlé par une routine d'initialisation qui est opaque, puisqu'elle est contrôlée par Apple . Il semble que le meilleur moyen de "contrôler" la situation est de changer le SDK de base.

Répondre

0

Désolé de répondre à ma propre question, mais j'étais confus. Cette partie est une erreur

Python dans le cadre version 2.5 lance 2.6.1

causé par mon pas se rendre compte que ce qui se passe ici (à partir du répertoire Version/2,6)

> ./Python 
-bash: ./Python: cannot execute binary file 
> Python 
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 

est que nous recherchons mon $ PATH et lancer/opt/local/bin/python. Toutes mes excuses pour la confusion.

Pour résumer, le réglage du SDK devrait obtenir le Python souhaité pour fonctionner comme on peut le voir par fouiner sur le chargeur:

> export DYLD_PRINT_LIBRARIES=1 
> ~/Desktop/X/build/Debug/X.app/Contents/MacOS/X 
dyld: loaded: /Users/telliott_admin/Desktop/X/build/Debug/X.app/Contents/MacOS/X 
dyld: loaded: /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa 
dyld: loaded: /System/Library/Frameworks/Python.framework/Versions/2.5/Python 
.. 
Questions connexes