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 :

Import relatif sous Python 3.1


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Import relatif sous Python 3.1
    Bonsoir,
    j'ai la structure de fichiers suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    + DOSSIER :module
         __init__.py
         fileA.py
         fileB.py
         + DOSSIER : tests
              + DOSSIER : options
                   test1.py
    test2.py
    Voici les différents codes :
    __init__.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env python
     
    # WARNNG : use Python 3
     
    from . import fileA
    fileA.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env python
     
    # WARNNG : use Python 3
     
    from . import fileB
    fileB.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env python
     
    # WARNNG : use Python 3
     
    print('File B has been imported')
    test2.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env python
     
    # WARNNG : use Python 3
     
    import module
    test1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python
     
    # WARNNG : use Python 3
     
    # We must find the module.
    import os
    import sys
     
    dir =  os.path.dirname( __file__ ) + '/../'*3
    dir = os.path.normpath(dir)
    sys.path.append(dir)
    import module
    Le dernier code fonctionne mais je trouve cela un peu sâle.

    Les nouvelles spécifications permettent-elles d'utiliser quelque chose de plus simple, c'est à dire sans les modules sys et os ?

    J'ai essayé from ... import module par analogie avec from . import module mais sans succès.

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Tu devrais pouvoir y arriver sans passer par sys.path, très certainement, mais...

    Les imports relatifs sont neuf, oui.
    Néanmoins ils sont déjà déconseillés.
    Pour la bonne et simple raison qu'ils sont uniquement, comme tu le vois, source de confusion et de bugs.

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par Antoine_935 Voir le message
    Néanmoins ils sont déjà déconseillés.
    Pour la bonne et simple raison qu'ils sont uniquement, comme tu le vois, source de confusion et de bugs.
    Ok, on va donc être patient, j'espère juste que des écritures comme from ... import seront supportées car cela serait bien plus pratique.

    Sais-tu où trouvé de la doc. sur les nouveaux import ?

  4. #4
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Boah, au pif sur google, par exemple
    http://www.python.org/doc/2.5.1/whatsnew/pep-328.html

    Mais, je le répète, les imports relatifs sont à éviter: from . import *, sorti du contexte, ça ne veut strictement rien dire

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par rambc Voir le message
    Bonsoir,
    j'ai la structure de fichiers suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    + DOSSIER :module
         __init__.py
         fileA.py
         fileB.py
         + DOSSIER : tests
              + DOSSIER : options
                   test1.py
    test2.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python
     
    # WARNNG : use Python 3
     
    # We must find the module.
    import os
    import sys
     
    dir =  os.path.dirname( __file__ ) + '/../'*3
    dir = os.path.normpath(dir)
    sys.path.append(dir)
    import module
    Le dernier code fonctionne mais je trouve cela un peu sale.

    Les nouvelles spécifications permettent-elles d'utiliser quelque chose de plus simple, c'est à dire sans les modules sys et os ?

    J'ai essayé from ... import module par analogie avec from . import module mais sans succès.
    M'est avis qu'il te manque des fichiers __init__.py dans tes dossiers tests et options pour que ça marche.
    Il me semble que les imports relatifs marchent pour des packages et un dossier sans fichier __init__.py n'est pas considéré comme faisant partie d'un package.

    EDIT: Donc, pour ton fichier test1.py, de 2 choses l'une :
    * soit il fait partie du package module et dans ce cas là tu rajoutes des fichier __init__.py pour utiliser from ... import module ;
    * soit il ne fait pas partie du package et dans ce cas-là, pas le droit aux imports relatifs !

Discussions similaires

  1. [Python 3.X] Importer des données .csv pour du traitement de signal sous Python
    Par SleepProgramRepeat dans le forum Général Python
    Réponses: 4
    Dernier message: 21/01/2015, 17h52
  2. Import CSV sous Excel, garder les 0 inutile
    Par ePoX dans le forum Excel
    Réponses: 4
    Dernier message: 26/01/2009, 16h25
  3. Fonction addslashes sous Python ?
    Par ecocentric dans le forum Général Python
    Réponses: 2
    Dernier message: 28/01/2006, 18h27
  4. importer dump sous oracle 9i
    Par m@estro dans le forum Oracle
    Réponses: 9
    Dernier message: 24/10/2005, 14h13
  5. Existe-t-il un rad sous python?
    Par sloshy dans le forum EDI/RAD
    Réponses: 6
    Dernier message: 03/10/2005, 09h26

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