Utiliser os.system() et os.path - Python - Programmation
Marsh Posté le 26-10-2008 à 14:53:02
tu essayes de faire quoi là ?
Marsh Posté le 26-10-2008 à 15:51:29
J'essaie d'exécuter le script xmlTopic.py se trouvant dans le dossier c:\Python25\xml depuis le dossier c:\Python25.
Code :
|
Là je crée donc le chemin jusqu'au fichier c:\Python25\xml\xmlTopic.py et je l'exécute avec l'os.system().
Mais j'aimerais faire en sorte de pouvoir importer ou exécuter des fichiers sans devoir passer le chemin absolu, en utilisant donc sys.path mais ça n'a pas l'air de fonctionner.
Marsh Posté le 26-10-2008 à 16:10:30
Je viens de tester un truc qui marche aussi:
Code :
|
Mais le but ce serait de faire carrément:
Code :
|
Sans que cela bug.
Marsh Posté le 26-10-2008 à 16:13:22
edit: sys.path n'a aucun rapport avec le PATH windows, faudrait peut-être lire la doc de temps en temps, c'est le path d'import des modules Python
Et ya quoi dans ton xmlTopic.py, pourquoi il est dans c:\Python25 alors qu'il n'a rien à y foutre, et pourquoi tu veux le lancer en shell plutôt que l'importer
Marsh Posté le 26-10-2008 à 18:00:18
Au départ, j'avais fait un parallèle entre les modules python et les script python (je veux dire, je pensais que le path menait tant aux modules à importer qu'à des fichiers à ouvrir ou à des scripts à lancer). J'ai lu la doc mais elle est pas super précise (elle parle que des modules, mais ne mentionne pas de restriction au sujet des autres élément mentionnées ci-dessus).
Sinon, les élément se trouvent pour le moment dans Python25 car ils sont encore en phase de test (après ils seront déplacés à gogo) et que le Python25 est facilement atteignable avec la console.
En réalité, j'ai 6-7 scripts et je les lance depuis un script lanceur. Ainsi, un utilisateur lance le script lanceur et tous les script suivent.
J'ai par contre essayer d'importer des fichier python contenant des fonction et des classes en ajoutant le chemin du dossier contenant ces fichiers dans le sys.path mais ça ne marche pas non plus. Il me fait 'ImportError: No module named exprReg'. Voici le code:
Code :
|
Le append ajoute bien le fichier lib dans lequel sont contenus les modules. Si met tous les fichiers dans le même dossier, les commandes import fonctionnent bien.
Marsh Posté le 26-10-2008 à 19:39:15
Shadew a écrit : Au départ, j'avais fait un parallèle entre les modules python et les script python (je veux dire, je pensais que le path menait tant aux modules à importer qu'à des fichiers à ouvrir ou à des scripts à lancer). J'ai lu la doc mais elle est pas super précise (elle parle que des modules, mais ne mentionne pas de restriction au sujet des autres élément mentionnées ci-dessus).
|
Mais qu'est-ce que c'est que cette horreur
La première règle de sys.path, c'est qu'on ne touche jamais à sys.path.
Ensuite, prière de poster ton arbo de modules parce que là tu colles des bouts de code sans qu'il soit possible de savoir de quoi tu parles (et dégages le tout de python25, ça n'a rien à y faire)
Marsh Posté le 27-10-2008 à 08:36:38
J'avais trouvé sur le net qu'il fallait bidouiller sys.path pour inclure des modules, c'est pour ça que j'ai fait un append.
Voici l'arbo:
C:\Python25\Extracteurv2\xml\config : contient les script genre xmlTopic.py qui doivent appeler les modules
C:\Python25\Extracteurv2\xml\lib : contient les modules genre ExprReg.
Marsh Posté le 27-10-2008 à 10:54:12
Shadew a écrit : J'avais trouvé sur le net qu'il fallait bidouiller sys.path pour inclure des modules, c'est pour ça que j'ai fait un append. |
$ mkdir xml |
Marsh Posté le 27-10-2008 à 16:34:05
Merci!! Donc en fait il suffit de rajouter des fichiers __init__.py pour pouvoir importer des modules. Et comment faire pour importer le module se trouvant dans lib depuis le script se trouvant dans config? Il faudrait réussir à revenir en arrière d'un fichier et puis importer lib. C'est possible ou bien il faut s'arranger que les fichiers respecte ton arborescence?
Marsh Posté le 27-10-2008 à 16:41:42
Shadew a écrit : Merci!! Donc en fait il suffit de rajouter des fichiers __init__.py pour pouvoir importer des modules. |
Plus précisément, le fichier __init__.py transforme le répertoire dans lequel il est contenu en module python. Qui peut contenir des sous-modules si besoin.
Shadew a écrit : Et comment faire pour importer le module se trouvant dans lib depuis le script se trouvant dans config? Il faudrait réussir à revenir en arrière d'un fichier et puis importer lib. |
C'est possible à partir de Python 2.6 (ou 2.5 en important depuis __future__) en utilisant les Absolute/Relative imports, mais sans ça il faut faire référence à la racine de l'arbo, il n'est (à ma connaissance) pas possible de "remonter". C'est pourquoi dans xml.config.xmlmodule j'importe xml.lib.exprreg (le chemin d'import à partir de app, donc)
Marsh Posté le 26-10-2008 à 14:19:56
Kikoo,
J'ai réussi à faire ce que je voulais mais je pense qu'il y a moyen de faire plus proprement. Voici ma méthode pour exécuter un script python se trouvant dans le fichier c:\Python25\xml:
Si je met ce même script dans c:\Python25 et que je fais
ça marche aussi. Je supposais que c'est dû au fait que le répertoire c:\Python25 se trouve dans la variable sys.path, j'ai donc essayé ce code-ci:
qui ajoute dans un premier le fichier c:\Python25\xml à la variable sys.path. Mais l'appel os.system() me renvoie "'xmlTopic.py' is not recognized as an internal or external command,
operable program or batch file."
Est-il possible de jouer avec la variable sys.path ou doit-on faire comme je fais?
Merci!!