Lorsqu'on lance l'application depuis un autre répertoire, ça foire parce que les chemins vers les images sont indiqués en relatifs, et python cherche dans le répertoire où il a été lancé, pas dans le répertoire du fichier ui.py.
Ça peut se résoudre en créant à l'init un attribut install_path
class interface(gtk.Window):
def __init__(self):
super(interface, self).__init__()
self.install_path = os.path.dirname(inspect.getfile(inspect.currentframe()))
qu'on utilise pour préfixer les chemins :
blue = cairo.ImageSurface.create_from_png(self.install_path + '/pixs/blue_alpha.png')
red = cairo.ImageSurface.create_from_png(self.install_path + '/pixs/red_alpha.png')
green = cairo.ImageSurface.create_from_png(self.install_path + '/pixs/green_alpha.png')
yellow = cairo.ImageSurface.create_from_png(self.install_path + '/pixs/yellow_alpha.png')
boum = cairo.ImageSurface.create_from_png(self.install_path + '/pixs/boum_alpha_big.png')
[...]
Testé chez moi, ça marche mais ce n'est peut-être pas la façon habituelle de procéder, je n'en sais rien. Une autre approche pour distribuer pourrait être de mettre les chemins en dur dans les fichiers du paquet. Ou, pour distribuer une archive, d'utiliser un makefile qui modifie les fichiers .py lors du make install pour remplacer pas exemple $INSTALL_DIR par le chemin qui va bien. Mais peut-être qu'en python, on fait encore autrement. Si qqn sait, ça m'intéresse.
Avant la release, il faudrait aussi placer le fichier de config dans un répertoire adapté. J'avais posé la question ici-même. Je l'ai fait pour gbirthday et ça donne ça, mais il y a peut-être plus simple :
# If XDG_CONFIG_HOME is defined, use it to store config files
if 'XDG_CONFIG_HOME' in os.environ:
self.base_config_path = os.environ['XDG_CONFIG_HOME'] + "/gbirthday"
# If no config file here, check for config files in ~/.config
if not os.path.isdir(self.base_config_path):
if os.path.isdir(os.environ['HOME'] + "/.config/gbirthday"):
shutil.copytree(os.environ['HOME'] + "/.config/gbirthday",
self.base_config_path)
else:
os.makedirs(self.base_config_path)
# else, use ~/.config
else:
self.base_config_path = os.environ['HOME'] + "/.config/gbirthday"
if not os.path.isdir(self.base_config_path):
os.makedirs(self.base_config_path)
J'ai essayé de prévoir le cas où XDG_CONFIG_HOME est défini alors qu'avant, il ne l'était pas. (Mais le cas où il disparaît n'est pas prévu…)
Pour ces deux points, je suis plutôt demandeur de "bonnes pratiques".
[^] # Re: Petit bug, ouverture application.
Posté par jihele . En réponse à la dépêche Bubble Crusher 0.9 bêta release. Évalué à 2.
Lorsqu'on lance l'application depuis un autre répertoire, ça foire parce que les chemins vers les images sont indiqués en relatifs, et python cherche dans le répertoire où il a été lancé, pas dans le répertoire du fichier ui.py.
Ça peut se résoudre en créant à l'init un attribut install_path
qu'on utilise pour préfixer les chemins :
Testé chez moi, ça marche mais ce n'est peut-être pas la façon habituelle de procéder, je n'en sais rien. Une autre approche pour distribuer pourrait être de mettre les chemins en dur dans les fichiers du paquet. Ou, pour distribuer une archive, d'utiliser un makefile qui modifie les fichiers .py lors du make install pour remplacer pas exemple $INSTALL_DIR par le chemin qui va bien. Mais peut-être qu'en python, on fait encore autrement. Si qqn sait, ça m'intéresse.
Avant la release, il faudrait aussi placer le fichier de config dans un répertoire adapté. J'avais posé la question ici-même. Je l'ai fait pour gbirthday et ça donne ça, mais il y a peut-être plus simple :
J'ai essayé de prévoir le cas où XDG_CONFIG_HOME est défini alors qu'avant, il ne l'était pas. (Mais le cas où il disparaît n'est pas prévu…)
Pour ces deux points, je suis plutôt demandeur de "bonnes pratiques".