Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Je ne trouve pas mon chemin...

11 réponses
Avatar
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_chemin\mon_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

10 réponses

1 2
Avatar
Amaury Forgeot d'Arc
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

Avatar
jmdeschamps
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


Avatar
Amaury Forgeot d'Arc
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

Avatar
jmdeschamps
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 ;-)


Avatar
Thomas Paviot
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


Avatar
Amaury Forgeot d'Arc
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

Avatar
Thomas Paviot
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


Avatar
stephane
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] ) )

Avatar
Jean-Marc Molina
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.

Avatar
Michel Claveau
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
1 2