Je ne trouve pas mon chemin...

Le
Thomas Paviot
Bonjour,

J'utilise Python 2.4 et wxPython 2.6.3.2. (sous WinXP)

Si j'exécute mon script depuis le répertoire où il est enregistré, tout
fonctionne correctement.


Par contre, si j'exécute ce script depuis un autre répertoire, par exemple

python .autre_cheminmon_script.py

ce script ne s'exécute pas correctement et produit un wxAssertFailure
(de même pour le répertoire qui contient les traductions qui n'est pas
trouvé etc.)

Comment faire pour que le répertoire courant soit celui où le script est
enregistré et pas celui depuis lequel il est lancé?

Thomas
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Amaury Forgeot d'Arc
Le #542331
Bonjour,

J'utilise Python 2.4 et wxPython 2.6.3.2. (sous WinXP)

Si j'exécute mon script depuis le répertoire où il est enregistré, tout
fonctionne correctement.


Par contre, si j'exécute ce script depuis un autre répertoire, par exemple

python .autre_cheminmon_script.py

ce script ne s'exécute pas correctement et produit un wxAssertFailure
(de même pour le répertoire qui contient les traductions qui n'est pas
trouvé etc.)


Quelle est l'erreur exactement ? A mon avis, il doit y avoir un moyen de
modifier ton code pour qu'il aille chercher les fichiers nécessaires au
bon endroit...


Comment faire pour que le répertoire courant soit celui où le script est
enregistré et pas celui depuis lequel il est lancé?


start /D .autre_chemin python .autre_cheminmon_script.py

Ajoute /B si tu veux vraiment l'exécuter dans la même fenêtre.

--
Amaury

jmdeschamps
Le #542330
Amaury Forgeot d'Arc wrote:
Bonjour,

J'utilise Python 2.4 et wxPython 2.6.3.2. (sous WinXP)

Si j'exécute mon script depuis le répertoire où il est enregistr é, tout
fonctionne correctement.


Par contre, si j'exécute ce script depuis un autre répertoire, par exemple

python .autre_cheminmon_script.py

ce script ne s'exécute pas correctement et produit un wxAssertFailure
(de même pour le répertoire qui contient les traductions qui n'est pas
trouvé etc.)


Quelle est l'erreur exactement ? A mon avis, il doit y avoir un moyen de
modifier ton code pour qu'il aille chercher les fichiers nécessaires au
bon endroit...


Comment faire pour que le répertoire courant soit celui où le scrip t est
enregistré et pas celui depuis lequel il est lancé?


start /D .autre_chemin python .autre_cheminmon_script.py

Ajoute /B si tu veux vraiment l'exécuter dans la même fenêtre.

--
Amaury


si tu lis l'anglais va voir
http://groups.google.ca/group/comp.lang.python/browse_frm/thread/7804e8b400 ec2dc3/dff79c336db529ca?q=wxAssertFailure&rnum=6#dff79c336db529ca
sur cette même erreur et une solution

jean-marc


Amaury Forgeot d'Arc
Le #542328
si tu lis l'anglais va voir
http://groups.google.ca/group/comp.lang.python/browse_frm/thread/7804e8b400ec2dc3/dff79c336db529ca?q=wxAssertFailure&rnum=6#dff79c336db529ca
sur cette même erreur et une solution


Euh... c'est aussi une wxAssertFailure, mais rien ne dit que c'est la
"même erreur"... Je ne vois pas au contraire comment un changement de
répertoire peut influer sur un wx.InitAllImageHandlers().

Pour en être sûr, il faudrait le message complet, avec noms de fichiers,
numéros de ligne...

--
Amaury

jmdeschamps
Le #542327
Amaury Forgeot d'Arc wrote:
si tu lis l'anglais va voir
http://groups.google.ca/group/comp.lang.python/browse_frm/thread/7804e8 b400ec2dc3/dff79c336db529ca?q=wxAssertFailure&rnum=6#dff79c336db529ca
sur cette même erreur et une solution


Euh... c'est aussi une wxAssertFailure, mais rien ne dit que c'est la
"même erreur"... Je ne vois pas au contraire comment un changement de
répertoire peut influer sur un wx.InitAllImageHandlers().

Pour en être sûr, il faudrait le message complet, avec noms de fichie rs,
numéros de ligne...

--
Amaury


Tout à fait d'accord ;-)


Thomas Paviot
Le #542326
si tu lis l'anglais va voir
http://groups.google.ca/group/comp.lang.python/browse_frm/thread/7804e8b400ec2dc3/dff79c336db529ca?q=wxAssertFailure&rnum=6#dff79c336db529ca

sur cette même erreur et une solution


Euh... c'est aussi une wxAssertFailure, mais rien ne dit que c'est la
"même erreur"... Je ne vois pas au contraire comment un changement de
répertoire peut influer sur un wx.InitAllImageHandlers().

Pour en être sûr, il faudrait le message complet, avec noms de fichiers,
numéros de ligne...

J'ai trouvé : pour accéder à mes images, j'utilise un chemin relatif du

style "..bitmapsicons". Si on démarre le script depuis un chemin
différent, le chemin relatif pointe vers un dossier qui n'existe pas.
D'où l'erreur générée par wxPython.

J'ai donc 2 solutions:
- passer d'une localisation relative des dossiers à une localisation
absolue.
- lancer le script depuis le dossier ou il est enregistré.

La deuxième solution n'est pas toujours possible. Par exemple, je
construis un binaire du script à l'aide de py2exe, que je package avec
InnoSetup. Je crée dans le registre Windows une association entre le
type d'extension de fichier (".Dec") avec le binaire ("Decade.exe").

Lorsque je double-clique sur le fichier portant l'extension ".Dec", le
chemin par défaut (celui donné par os.getcwd()) est celui du fichier
".Dec", pas celui du script "Decade.exe". Donc un raise de l'erreur
ci-dessus.

Pour avoir cette fonctionnalité, j'ai donc dû passer tous mes chemins en
description absolue.

A moins que vous n'ayez une solution plus élégante?

Le résultat est là : http://www.decade-dynamics.org

Thomas Paviot


Amaury Forgeot d'Arc
Le #542325
J'ai trouvé : pour accéder à mes images, j'utilise un chemin relatif du
style "..bitmapsicons". Si on démarre le script depuis un chemin
différent, le chemin relatif pointe vers un dossier qui n'existe pas.
D'où l'erreur générée par wxPython.

J'ai donc 2 solutions:
- passer d'une localisation relative des dossiers à une localisation
absolue.
- lancer le script depuis le dossier ou il est enregistré.

La deuxième solution n'est pas toujours possible. Par exemple, je
construis un binaire du script à l'aide de py2exe, que je package avec
InnoSetup. Je crée dans le registre Windows une association entre le
type d'extension de fichier (".Dec") avec le binaire ("Decade.exe").

Lorsque je double-clique sur le fichier portant l'extension ".Dec", le
chemin par défaut (celui donné par os.getcwd()) est celui du fichier
".Dec", pas celui du script "Decade.exe". Donc un raise de l'erreur
ci-dessus.

Pour avoir cette fonctionnalité, j'ai donc dû passer tous mes chemins en
description absolue.

A moins que vous n'ayez une solution plus élégante?


Dans mon application, j'utilise la variable __file__, qui contient le
nom du fichier du module courant.
A partir de là, c'est facile: on enlève le nom du fichier, et on ajoute
le "../bitmaps/icons/xx.ico" qui va bien. C'est un jeu d'enfant avec les
fonctions de os.path.
Quand tout est dans un .zip, c'est un peu plus compliqué: il faut
détecter que le chemin contient ".zip/", et utiliser ZipFile pour
extraire le fichier désiré.
Je ne sais pas ce que renvoie __file__ quand on utilise py2exe.

Bon courage,

--
Amaury

Thomas Paviot
Le #542130
J'ai trouvé : pour accéder à mes images, j'utilise un chemin relatif
du style "..bitmapsicons". Si on démarre le script depuis un chemin
différent, le chemin relatif pointe vers un dossier qui n'existe pas.
D'où l'erreur générée par wxPython.

J'ai donc 2 solutions:
- passer d'une localisation relative des dossiers à une localisation
absolue.
- lancer le script depuis le dossier ou il est enregistré.

La deuxième solution n'est pas toujours possible. Par exemple, je
construis un binaire du script à l'aide de py2exe, que je package avec
InnoSetup. Je crée dans le registre Windows une association entre le
type d'extension de fichier (".Dec") avec le binaire ("Decade.exe").

Lorsque je double-clique sur le fichier portant l'extension ".Dec", le
chemin par défaut (celui donné par os.getcwd()) est celui du fichier
".Dec", pas celui du script "Decade.exe". Donc un raise de l'erreur
ci-dessus.

Pour avoir cette fonctionnalité, j'ai donc dû passer tous mes chemins
en description absolue.

A moins que vous n'ayez une solution plus élégante?


Dans mon application, j'utilise la variable __file__, qui contient le
nom du fichier du module courant.
A partir de là, c'est facile: on enlève le nom du fichier, et on ajoute
le "../bitmaps/icons/xx.ico" qui va bien. C'est un jeu d'enfant avec les
fonctions de os.path.


C'est bien ce que j'ai fait.

Quand tout est dans un .zip, c'est un peu plus compliqué: il faut
détecter que le chemin contient ".zip/", et utiliser ZipFile pour
extraire le fichier désiré.
Je ne sais pas ce que renvoie __file__ quand on utilise py2exe.

Je n'ai pas eu à m'en soucier. Tout fonctionne correctement.


Merci,

Thomas


stephane
Le #542127
Bonjour,

J'utilise Python 2.4 et wxPython 2.6.3.2. (sous WinXP)

Si j'exécute mon script depuis le répertoire où il est enregistré , tout
fonctionne correctement.


Par contre, si j'exécute ce script depuis un autre répertoire, par exemple

python .autre_cheminmon_script.py

ce script ne s'exécute pas correctement et produit un wxAssertFailure
(de même pour le répertoire qui contient les traductions qui n'est pas
trouvé etc.)

Comment faire pour que le répertoire courant soit celui où le scrip t est
enregistré et pas celui depuis lequel il est lancé?

Thomas


Testé sous linux uniquement :

import sys,os
os.chdir( os.path.dirname( sys.argv[0] ) )

Jean-Marc Molina
Le #542124
Thomas Paviot wrote:
Comment faire pour que le répertoire courant soit celui où le script
est enregistré et pas celui depuis lequel il est lancé?


Sous Windows tu peux préfixer le nom de ton script par l'option "%~dp0" :
python "%~dp0mon_script.py"

Ça change le chemin courant à l'exécution.

Michel Claveau
Le #542123
Bonsoir !

Intéressant. Je ne connaissais pas.



Mais, chez moi, ça n'a pas l'air de vouloir marcher :
c:python24python: can't open file '%~dp0test.py': [Errno 2] No such
file or directory


--
@-salutations

Michel Claveau
Publicité
Poster une réponse
Anonyme