Comment puis-je obtenir le répertoire actuel de l'exécutable dans py2exe?
J'utilise ce bout de code dans mon script afin de préciser, dans une croix-plate-forme de façon, exactement où il est exécuté à partir de:
SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__))
Assez simple. J'ai ensuite continuer à utiliser SCRIPT_ROOT
dans d'autres zones de mon script pour s'assurer que tout est bien relatif. Mon problème survient lorsque je l'exécute par le biais de py2exe, parce que l'exécutable généré ne définit pas __file__
donc mon script pauses. Personne ne sait comment résoudre ou contourner ce problème?
source d'informationauteur Chris Lamberson | 2010-02-18
Vous devez vous connecter pour publier un commentaire.
Ici est la py2exe de la documentation de référence et voici les éléments pertinents:
sys.executable
est réglé sur le chemin d'accès complet du fichier exe.sys.argv
est le chemin complet de l'exécutable, le reste sont les arguments de ligne de commande.sys.frozen
n'existe que dans l'exécutable. Il est réglé sur "console_exe" pour une console executable, pour "windows_exe" pour une console moins gui exécutable, et de "dll" pour un inprocess serveur dll.__file__
n'est pas définie (vous pouvez utiliser sys.argv[0] au lieu de cela)Il ne ressort pas de ces docs que "le fichier exe" et "l'exécutable" sont la même chose, et donc de savoir si
sys.executable
etsys.argv[0]
sont la même chose. En regardant le code qui a travaillé pour deux script.py et py2exe_executable.exe la dernière fois que j'avais à faire, j'ai trouver quelque chose comme:Comme je l'ai dit, mais je ne me souviens pas pourquoi j'ai pensé que c'était nécessaire, au lieu de simplement en utilisant
sys.argv[0]
.En utilisant uniquement
basis
était adéquate pour l'emploi à la main (lire les fichiers dans ce répertoire). Pour une base plus permanente, d'enregistrer, de diviser quelque chose commeos.path.realpath(basis)
.Mise à jour Fait un test; beats devinettes et un fauteuil pontification 🙂
Résumé: Ignorer sys.congelés, ignorer sys.exécutable, aller avec sys.argv[0] sans condition.
Preuve:
=== foo.py ===
=== setup.py ===
=== résultats ===
Py2exe ne définit pas
__file__
: http://www.py2exe.org/index.cgi/Py2exeEnvironmentL'OP a demandé une py2exe version imprimable de:
La meilleure réponse est de déterminer si python est gelé dans un fichier exe, py2exe a de la documentation sur ce:
http://www.py2exe.org/index.cgi/HowToDetermineIfRunningFromExe
Depuis, le python est L'aeapvoici un L'aeap version ...
Cheers!
Essayez ceci: