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 :

Modules et modules de modules [Débutant(e)]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Modules et modules de modules
    Bonjour,

    Dans un tutoriel, pour utiliser des modules, on fait un dossier "utils" dans le même dossier que le code principal. Dans ce dossier on met __init__.py et les modules. Pour utiliser lesdits modules, on fait ensuite dans le "code principal" from utils.nomdumodule import nomdelafonction.

    Je me demande si dans le dossier utils, je crée un autre dossier utils, et je fais un module de module, et si dans le module je fais un import du module de module, est-ce que depuis le code principal je vais pouvoir appeler le module de module? Suffit-il d'appeler le module qui l'appellera lui-même s'il a besoin (si une fonction utilise le module de module)?
    Quelle est la méthode la plus rapide?

    J'ai déjà vu dans la syntaxe un numpy.linalg.nomdelafonction. Cela reste plus facile qu'un from x import from y import from z import nomdelafonction (si cette syntaxe existe).

    En bref, si vous ne voulez pas vous fatiguer : simplement montrez-moi un exemple, ou une syntaxe qui appelle un module de module fait par l'utilisateur. (Et l'organisation, l'arborescence des modules.)

    En vous remerciant d'avance pour vos réponses,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Maximus_Irathus Voir le message
    En bref, si vous ne voulez pas vous fatiguer : simplement montrez-moi un exemple, ou une syntaxe qui appelle un module de module fait par l'utilisateur. (Et l'organisation, l'arborescence des modules.)
    Le python tutorial donne de bons exemples de ce qui s'appelle package.

    Citation Envoyé par Maximus_Irathus Voir le message
    Je me demande si dans le dossier utils, je crée un autre dossier utils, et je fais un module de module, et si dans le module je fais un import du module de module, est-ce que depuis le code principal je vais pouvoir appeler le module de module? Suffit-il d'appeler le module qui l'appellera lui-même s'il a besoin (si une fonction utilise le module de module)?
    Une fois que vous aurez lu le tutoriel, le plus simple sera d'essayer de construire cela par vous même.
    Vous pourrez voir comment çà fonctionne et si vous avez des questions précises, les illustrer à partir de ce que vous avez construit.
    note: Si vous n'essayez pas par vous même vous ne mettrez jamais le doigt sur les concepts qui vous passent par dessus la tête (et qui mériteraient des explications ici). Et tant que vous ne mettez pas les mains dans le cambouis pour voir ce qui coince pas la peine de vous raconter, en moins bien, ce que vous avez déjà dans les tutos.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, je ne connaissais pas le tutoriel.
    J'aime mettre les mains de le cambouis ne vous inquiétez pas, là c'était juste pour une question de temps - il est important de ne pas s'obstiner dans la mauvaise direction (ou encore dans une direction pas du tout optimale).
    J'essaierai de poster uniquement si nécessaire ne vous en faites pas.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Maximus_Irathus Voir le message
    Merci beaucoup, je ne connaissais pas le tutoriel.
    J'aime mettre les mains de le cambouis ne vous inquiétez pas, là c'était juste pour une question de temps - il est important de ne pas s'obstiner dans la mauvaise direction (ou encore dans une direction pas du tout optimale).
    J'essaierai de poster uniquement si nécessaire ne vous en faites pas.
    Vous faites comme vous voulez...
    Imaginez allez voir un bahut chez un marchand de meubles. C'est juste une armoire de rangement. Mais savoir ouvrir les portes ne va pas va aider à savoir quoi ranger en haut à droite ou en bas à gauche: ça, c'est votre décision et l'optimal se définira en fonction de l'usage que vous allez en faire...

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

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il est important de maîtriser les packages. Non seulement ils permettent de clarifier la structure d'un programme complexe, mais ils facilitent aussi la réutilisation de fonctions personnelles d'un programme à l'autre. Les packages peuvent être complexes (l'un de mes programmes a plus de 70 modules perso dans une trentaine de sous-répertoires).

    Cependant, quand l'un des modules importe un autre module du même package, il y a une subtilité qu'on ne voit pas tout de suite: le répertoire courant est alors celui du programme qui importe le package, et non le répertoire du module!

    A titre d'exemple:
    J'ai un programme principal prog.py avec un package lib situé au même niveau.
    J'ai 2 modules mod1.py et mod2.py situés au même niveau au sein du package: lib/slib/mod1.py et lib/slib/mod2.py.
    Dans le programme principal, j'importe mod1.py avec: "import lib.slib.mod1"
    Mais si mod1 doit importer mod2, il devra utiliser "import lib.slib.mod2" et non "import mod2", parce que le répertoire courant est celui du programme principal.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    merci beaucoup tyrtamos.

    Par contre j'ai un petit souci, du coup pour modifier un peu l'exemple, si mod1 dans une fonction, doit faire appel à une fonction de mod2, mais que celui-ci est "plus bas" (qu'il est un module de mod1, dans un package qui est lui-même dans celui contenant mod1) - que sera-t-il écrit pour cet appel dans mod1.py? Sachant que tout sera ensuite appelé par le programme "plus haut"?

    Directement le nom de la fonction? [Ou encore un chemin prenant déjà en compte un appel depuis le programme principal?]

    J'ai l'impression d'avoir tout essayé, mais ça n'est pas encore tout à fait bon hélas. Merci pour vos réponses, elle me font gagner du temps.

    Sinon je vais le mettre au même niveau que mod1 pour le moment, car il est vrai que pour l'instant je n'ai pas autant à trier. Mais j'aimerais savoir si ça peut fonctionner avec un mod2 d'un niveau plus bas, car il sera à un moment ou un autre plus cohérent de hiérarchiser.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ah je vois, en fait j'ai trouvé, mais il faut juste constater qu'on ne peut pas se permettre à la fois d'utiliser le module de module, depuis le module et depuis le programme principal. Seulement faire l'un puis l'autre.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Maximus_Irathus Voir le message
    Ah je vois, en fait j'ai trouvé, mais il faut juste constater qu'on ne peut pas se permettre à la fois d'utiliser le module de module, depuis le module et depuis le programme principal. Seulement faire l'un puis l'autre.
    Si vous n'illustrez pas ce que vous racontez avec un minimum de code, impossible de comprendre ce que peut bien vouloir dire "utiliser le module de module, depuis le module et depuis le programme principal".
    Et si on ne comprend pas ce que vous racontez, pas grand monde essaiera de vous aider...

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

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Je m'excuse pour mon manque de clarté, même si je pense avoir trouvé tout seul, peut-être pouvez vous m'apportez d'avantage de précisions si ça vous semble pertinent, voici un organigramme et les données :

    Nom : qustion.jpg
Affichages : 206
Taille : 151,3 Ko

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Relisez ce qu'a raconté Tyrtamos: "from modules.mod.module_1.1 import nom_fonction" fonctionnera pourvu que "modules" soit dans les chemins dans lesquels "import" ira chercher.
    Lorsque vous lancez script.py, Python ajoute le répertoire contenant script.py à ces chemins. Si ce répertoire contient "modules", çà fonctionne. Et si script.py est dans le répertoire "modules", çà ne fonctionnera pas (tout seul).

    Ceci dit, je ne comprends toujours pas le problème que vous cherchez à résoudre.
    Si vous fabriquez une répartition de votre code en plusieurs machins A, B, C.
    Le programme principal fera import A, import B, import C et appellera les différentes fonctions via A.f(), B.f(),...
    Pour le programme appelant, que A soit le script A.py ou le package du s/répertoire A, il devrait toujours pouvoir appeler la fonction f de la même façon pour éviter d'avoir à mettre à jour nombre de lignes... Et si A est un package, l'appelant n'a pas à savoir où a été écrite cette fonction.
    En écrivant çà, je formule un besoin que vous n'avez peut être pas, mais que l'on résout dans le fichier __init__.py du package avec les from ... import ad hoc.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/01/2008, 11h26
  2. Executer la procedure d un module depuis un autre module
    Par sebastien_oasis dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/08/2007, 11h08
  3. Réponses: 4
    Dernier message: 14/05/2007, 13h44
  4. [EAR] 2 modules WEB pour 1 module EJB
    Par skrosoft dans le forum Java EE
    Réponses: 2
    Dernier message: 09/03/2007, 10h32
  5. [Module] Comment retirer un module déjà installé ?
    Par sekiryou dans le forum Apache
    Réponses: 7
    Dernier message: 25/06/2006, 14h45

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