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 :

Importation d'un module


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 37
    Points
    37
    Par défaut Importation d'un module
    Bonjour. Je débute en Python et j'ai une question sur les importations:
    j'ai créé un projet dans Spyder.
    Dedans, j'ai créé un package paquet1 dans lequel j'ai mis un module module1.
    J'ai aussi créé dans le projet un package paquet2 dans lequel j'ai mis un module module2.
    Quelle est la syntaxe pour importer module1 dans module2 pour utiliser les fonctions du module module1?
    J'ai un peut tout essayé mais je n'ai pas réussi.
    Merci.

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Avant tout, il faut t'assurer que dans le dossier de ton package tu ai bien un fichier "__init__.py", même vide.

    Ensuite la syntaxe d'import est "import <package>.<module> as <alias>", puis dans ton code "<alias>.<classe/fonctions>".
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Merci pour ta réponse.
    J'ai déjà essayé cette syntaxe : avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import paquet1.module1 as module
    j'ai le message d'erreur:
    import paquet1.module1 as module
    ImportError: No module named paquet1.module1

    Les fichiers "__init__.py" sont bien ajoutés automatiquement par Spyder.
    Je précise que les dossiers paquet1 et paquet2 représentant les packages ne sont pas imbriqués mais sur le même niveau.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cal23 Voir le message
    Je précise que les dossiers paquet1 et paquet2 représentant les packages ne sont pas imbriqués mais sur le même niveau.
    Bonjour,

    Le mieux, si vous en avez la patience, reste encore d'étudier par vous-même le mécanisme d'import de Python : https://docs.python.org/3/reference/import.html

    En effet, celui-ci est passablement complexe à détailler et l'avenir des namespace packages ne risque pas d'améliorer les choses !

    Un bon exemple valant mille explications, ci-joint une archive .zip contenant une arborescence avec du code exemple en Python3 pour illustrer tout ceci :

    exemple-import.zip

    @+.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Ca marche mais ça ne paraît pas très pratique si on a plein de packages imbriqués les uns dans les autres: il faut ajouter ../../../ etcaetera au path ?
    Et dans la pratique, est-ce qu'on fait un module principal avec des packages dans le dossier de ce module ?
    On évite d'avoir recours à l'ajout de ../../../ etcaetera au path ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cal23 Voir le message
    Ca marche mais ça ne paraît pas très pratique si on a plein de packages imbriqués les uns dans les autres: il faut ajouter ../../../ etcaetera au path ?
    Et dans la pratique, est-ce qu'on fait un module principal avec des packages dans le dossier de ce module ?
    On évite d'avoir recours à l'ajout de ../../../ etcaetera au path ?
    En théorie, quand on fait des packages, c'est qu'on construit une librairie en arborescence (avec un seul dossier parent et tous les packages en sous-dossiers de ce dossier parent).

    Et si on construit une librairie, ça veut dire que les modules des packages de cette librairie ne seront qu'importés (jamais lancés comme scripts indépendants).

    Je vous ai donné un exemple de module2.py qui fait les deux : importer module1.py en tant que script principal indépendant module2.py et importer module1.py en tant que module module2.py lui-même importé par main.py, un script consommateur externe à cette librairie.

    Si vous établissez vos packages correctement dans une lib, c'est le second cas que vous utiliserez systématiquement, à savoir un fichier programme externe e.g. main.py qui consomme votre lib de l'extérieur.

    Donc, vous aurez systématiquement :

    Pour main.py, le programme consommateur de la lib :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    # on importe module2
    import src.package2.module2 as M2
    et pour src/package2/module2.py, le fournisseur de services :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    # dépendra de l'emplacement de package1
    # ici le module se trouve à src/package1/module1.py
    from ..package1 import module1
    Et rien de plus (tout le reste du blabla était là pour vous faire réfléchir sur les mécanismes d'import de Python), c'est le code ci-dessus qu'il faut employer dans la vie de tous les jours.

    @+.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    OK, merci bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E]Exporter / importer tous les modules et frm d'un projet
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 6
    Dernier message: 16/03/2013, 18h37
  2. Réponses: 6
    Dernier message: 22/06/2009, 08h51
  3. [VBA]Exporter / importer tous les modules et frm d'un projet
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 12/02/2007, 16h31
  4. [WinCVS] Importer un nouveau module
    Par kloorane dans le forum CVS
    Réponses: 2
    Dernier message: 18/09/2006, 12h22
  5. blocage base après importation d'un module
    Par voodoo dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2004, 15h15

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