IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

utilisation de modules perso dans des sous-dossiers


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut utilisation de modules perso dans des sous-dossiers
    salut à tous
    j'ai un dossier "mesmodules" auquel je fais appel en début de chaque programme par cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    sys.path.insert(0, "/chemin/vers/le/dossier/mesmodules")
    import nimportequelpydecedossier
    et ça marche nickel.

    Maintenant, je voudrais pouvoir classer mes modules en sous-dossiers (modules d'algèbre, d'arithmétique etc) pour mieux m'y retrouver
    Je ne voudrais pas ajouter dans le path chaque nouveau sous-dossier créé à chaque fois
    existe-t-il un moyen de mettre une expression régulière dans le sys.path.insert qui signifierait à l'ordinateur : "tout fichier de tout sous-dossier de niveau 1 du dossier mesmodules" ?
    merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par elodouwen Voir le message
    existe-t-il un moyen de mettre une expression régulière dans le sys.path.insert qui signifierait à l'ordinateur : "tout fichier de tout sous-dossier de niveau 1 du dossier mesmodules" ?
    Non il faut itérer autant de fois que de modules autant écrire from mesmodules import machin.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut
    mais n'y a-t-il pas moyen d'écrire une ligne de programme en python utilisant sys.event qui détecte tous les sous-dossiers de mon dossier mesmodules, et qui les rajoute au path ?

    finalement j'ai répondu tout seul à ma propre question avec ceci qui marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    from pathlib import Path 
    import os
     
    lechemin="/Users/[Moi-même]chemin/vers/mesmodules/"
    lecheminpath=Path(lechemin)
    L=[lechemin]
     
     
    if (os.path.exists(lechemin)):
        a=1
    if (lecheminpath.is_dir()):
        b=1
    print(a,b)
     
    for x in os.scandir(lecheminpath): 
        if x.is_dir():
            y=(lechemin+str(x)[11:-2])
            L.append(y)
            #print("ooo",y,L)
            #print(x[11:-2])
     
    import sys
    for chemins in L:
        sys.path.insert(0, chemins)

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Mettre des modules perso à une adresse disque séparée apporte une complexité embêtante, puisque le programme lui-même ne pourra pas être transporté facilement sur une autre machine, voire un autre OS.

    Il vaut beaucoup mieux placer les modules perso dans un répertoire à côté du programme, et les gérer comme un "package":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    monprogramme.py
    librairie <= répertoire
      algèbre <= répertoire
      arithmétique <= répertoire
        analyse combinatoire <= répertoire
      géométrie <= répertoire
    Voir l'utilisation des "packages" ("paquets" en français): https://docs.python.org/fr/3/reference/import.html.
    En particulier, ne pas oublier les fichiers "__init__.py" même vide à chaque niveau de sous-répertoire de l'arborescence.

    Ainsi, les différents modules pourront être importés selon les besoins sans qu'une adresse disque ne soit inscrite en dur dans le code du programme.

    A noter que ça marche aussi très bien avec un programme comme pyinstaller ou cx_freeze, qui intégrera les modules perso du package sans problème avec l'exécutable.

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 415
    Par défaut
    merci je vais réfléchir à tout ça

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    De toutes manières tu peux directement importer depuis les sous-modules du moment que le module parent est connu de python.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /chemin/main/
        main.py
    /chemin/modules/
        sous_modules/
            mod.py
            modc.py
        moda.py
    avec les fichiers:
    main.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import sys
    sys.path.insert(0, "/home/chemin/modules")
    import moda
    from sous_modules import modb # ou bien 'import sous_modules.modb'
    moda.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    from sous_modules import modb
    print("moda")
    modb.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import sous_modules.modc
    print("modb")
    modc.py
    Les print() t'indiqueront l'ordre des imports.

Discussions similaires

  1. Recherche de fichiers Excel dans des sous-dossiers
    Par IJeromeI dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/01/2014, 17h14
  2. lecture de fichiers dans des sous-dossiers
    Par africanwinners dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2013, 17h48
  3. [XL-2003] récupérer valeur d'une cellule, dans plusieurs fichiers placés dans des sous-dossiers
    Par greenfire15 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/08/2012, 09h42
  4. Imprimer des images dans des sous-dossier
    Par logan139 dans le forum Imagerie
    Réponses: 0
    Dernier message: 18/03/2009, 11h07
  5. Appel de fonction dans des sous dossiers
    Par milach dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/01/2008, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo