114 votes

Détermination du chemin d'accès à l'application dans un EXE Python généré par pyInstaller

J'ai une application qui réside dans un seul fichier .py. J'ai réussi à faire en sorte que pyInstaller l'intègre avec succès dans un EXE pour Windows. Le problème est que l'application nécessite un fichier .cfg qui se trouve toujours directement à côté de l'application dans le même répertoire.

Normalement, je construis le chemin en utilisant le code suivant :

import os
config_name = 'myapp.cfg'
config_path = os.path.join(sys.path[0], config_name)

Cependant, il semble que le sys.path soit vide lorsqu'il est appelé à partir d'un EXE généré par pyInstaller. Ce même comportement se produit lorsque vous exécutez la ligne de commande interactive de python et que vous essayez de récupérer sys.path[0].

Existe-t-il un moyen plus concret d'obtenir le chemin d'accès de l'application en cours d'exécution afin de pouvoir trouver les fichiers qui lui sont relatifs ?

4voto

user1986021 Points 11
os.path.dirname(sys.argv[0])

Cela me convient.

2voto

dashesy Points 376

Il y a beaucoup de réponses ici, mais j'ai trouvé cette solution qui fonctionne dans la plupart des cas :

import os
import sys
import os.path as op
try:
    this_file = __file__
except NameError:
    this_file = sys.argv[0]
this_file = op.abspath(this_file)
if getattr(sys, 'frozen', False):
    application_path = getattr(sys, '_MEIPASS', op.dirname(sys.executable))
else:
    application_path = op.dirname(this_file)

0voto

Igor Micev Points 669

Dans mon cas, j'utilise un service qui exécute un exécutable .exe construit avec pyinstaller . J'utilise os.path.dirname(**os.path.realpath(sys.executable)**)

import os
import sys
# determine if application is a script file or frozen exe
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(os.path.realpath(sys.executable))
elif __file__:
    application_path = os.path.dirname(__file__)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X