J'ai une application Python qui charge les modules python dynamiquement au moment de l'exécution (en utilisant __import__
). Les modules à charger sont dans un paquet appelé 'plugins
' (c'est-à-dire sous-dossier appelé plugins
avec __init__.py
etc.). Tout fonctionne correctement depuis l'interpréteur python, et même lorsqu'il est compilé dans un binaire Windows en utilisant py2exe.py2app: comment inclure les modules qui seront chargés par __import__?
J'ai essayé de construire une application OSX, qui a réussi, mais lors de l'exécution du fichier .app, j'obtiens une erreur ImportError: 'no module named plugins.xxxx
'.
Je suis assez sûr que j'ai donné les bonnes options à py2app ('includes': [...]
, 'packages':['plugins']
, identiques à ce que je fais pour py2exe), depuis quand je parcourir le contenu .app, je vois tous les modules d'extension dans un dossier Contents/Resources/lib/python2.5/plugins/
. Donc, pourquoi l'application ne trouve-t-elle pas mes modules (il doit y avoir un problème de chemin)?
Edit:
Je l'ai trouvé un moyen de le faire fonctionner, mais ce n'est pas une bonne solution: Quand je les chemins Python imprimé recherche les modules (en utilisant print sys.path
), je remarquai que le dossier Contents/Resources/lib/python2.5/plugins/
n'a PAS été répertorié. Cependant, le dossier Contents/Resources/
est, alors j'ai déplacé le dossier plugins
vers le dossier Contents/Resources
. Maintenant, les plugins sont trouvés. Mais je ne suis toujours pas heureux avec ce hack manuel et laid.