[Python] importer fichier d'un autre dossier [Résolu/Fermé]

Signaler
-
 FrViPofm -
Bonjour,

Je débute en python, et je ne sais pas comment inclure une classe décrite dans un fichier qui se trouve dans un autre dossier.

Si je fais : import MaClasse et que le fichier nommé MaClasse.py se trouve dans le même dossier, pas de problème.

En revanche si le fichier se trouve dans un autre dossier, ça ne marche pas.

exemple : import mondossier/MaClasse --> pas bon !

Je ne sais pas comment pointer correctement sur le fichier, ou comment définir les dossiers dans lesquels l'appli doit chercher les fichiers à inclure.

Quelqu'un pourrait-il m'expliquer le principe ??

Merci..

3 réponses

Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 519
Pour ce que je connais, il y a trois choses qui jouent: la variable d'environnement PYTHONPATH, la variable sys.path et les fichiers __init__.py

Dans PYTHONPATH tu peux mettre les dossiers ou python ira chercher les fichier à importer. Parfois cette variable est déjà définie, parfois pas. Si elle existe déjà il faut rajouter les dossiers que tu veux mais ne pas détruire les anciens. Les différents dossiers sont séparés par des deux-points.
Voici la syntaxe: PYTHONPATH=c:\machin:c:\autre_chemin

La variable sys.path (il faut importer sys pour l'utiliser) permet de modifier dynamiquement le pythonpath lors de l'excution d'un script. C'est une liste donc on utilise append pour ajouter un chemin.

Lorsque tu fais
import bidule
Et que bidule est un dossier contenu par l'un des dossiers du PYTHONPATH, alors python va chercher un fichier nommé __init__.py et va l'executer. S'il n'existe pas alors bidule ne sera pas considéré comme un module. Dans ce fichier tu peux en profiter pour faire des imports en raccourcis avec from prout import truc

C'est expliqué par ici: http://diveintopython.adrahon.org/xml_processing/packages.html
23
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
94
Date d'inscription
samedi 9 janvier 2010
Statut
Membre
Dernière intervention
25 avril 2011
44
merci j'aime bien la solution dynamique

import sys
sys.path.append("C:\\Documents and Settings\\Administrateur\\Bureau")
from mon_module_qui_est_sur_le_bureau import *
...
cette solution n'a rien de dynamique mon cher ami ;)
Messages postés
94
Date d'inscription
samedi 9 janvier 2010
Statut
Membre
Dernière intervention
25 avril 2011
44
Toi qui est si fort apporte nous tes lumières pour une 3eme possibilité ...
Avec un exemple précis à l'appui.

Cordialement ...
sys.path.append('path/to/app') # *nix path
# équivalent de 'from modules import module', mais, pour le coup, dynamique
getattr(__import__(modules, globals(), locals(), [module], -1), module)
# voir la doc : http://docs.python.org/library/functions.html#__import__
Messages postés
6
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 janvier 2015

Super, merci pour ta réponse, très complète. Maintenant j'y vois plus clair, et je sais vers où chercher pour approfondir la question.