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

EDI/RAD Python Discussion :

eclipse et ses misters


Sujet :

EDI/RAD Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut eclipse et ses misters
    Bonjour

    dans le répertoire r1 qui correspond à un projet python
    existe une sous répertoire Base.

    Ce sous répertoire contient
    • Explorateur.py
    • __init__.py
    • Type_flux.py


    le début du code de __init__.py

    Ce code fonctionne sans difficulté ( il n'y a ici que la partie qui pose un certain problème.

    au niveau des imports de from xx import * ,j'ai un rejet Unresolved Import mais pourquoi cette effet déplaisant ?

    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
    25
    26
    # coding: utf-8 
     
    '''
    Created on 8 nov. 2017
     
    @author: 
    '''
    import os
    from Explorateur import *
    from Type_flux  import *
     
    from asyncore import write
     
    if __name__ == '__main__':
        leType000 = Type000()
        le_Type_1 = Type1()
        le_Type_2 = Type2()
        le_Type_5 = Type5()
        le_Type_6 = Type6()    
        le_Type_44 = Type44()
        le_Type_45 = Type45() 
        le_Type_4 = Type4()
        le_Type_999 = Type999()
     
     
        nom_fichier_path_in = explorateur_window (".//")  # Recherche via explorateur
    ....

    avec cette déclaration plus de problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from Explorateur import *  # @UnresolvedImport
    from FluxRPC.Base.Type_flux import Type000, Type1, Type2, Type5, Type6, Type44, \
        Type45, Type4, Type999

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    C'est sans doute lié au fait que Python ne sait pas trouver le chemin des fichiers appelés.

    Pour se faire il faut rajouter le chemin de votre projet, la racine, soit avec sys.path soit dans les propriétés de votre projet Éclipse (PyDev je suppose ?) la section PYTHONPATH.

    Inutile de définir toute l'arborescence du moment que chaque sous-dossier contient un fichier __init__.py, fichier qui peut être vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    project\
        main.py
        sub_folder\
            __init__.py
            lib.py
    dans votre code se trouvant à la racine, exemple main.py :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sys, os
    sys.path.insert(1, os.path.abspath("."))
     
    from sub_folder import lib
    from sub_folder.lib import element
     
    print(element)
    print(lib.element)

  3. #3
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut merci
    une question pourquoi ceci étant le programme fonctionne?

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Citation Envoyé par dedalios Voir le message
    une question pourquoi ceci étant le programme fonctionne?
    Je pensais que vos import ne fonctionnait pas.

    Si votre programme se trouve à la racine du projet alors PyDev l'inclut d'office il me semble et/ou le répertoire du fichier en cours d’exécution.
    Mais par-contre essayez depuis un sous-répertoire de votre projet de faire un import relatif :

    Voici un cas concret :

    Avec l'arborescence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    project\
        main.py
        sub_folder\
            __init__.py
            lib.py
            sub_folder_lvl2\
                __init__.py
                lib2.py
    main.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from sub_folder import lib
    from sub_folder.sub_folder_lvl2 import lib2
     
    print(lib.element)
    print(lib2.element)


    lib.py :


    lib2.py :


    Jusque là tout fonctionne.

    Maintenant on veut vouloir importer lib2 depuis lib.py :

    Ceci ne devrait pas marcher en exécutant main :

    lib.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from sub_folder_lvl2 import lib2
     
    element = lib2.element
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "project\main.py", line 1, in <module>
        from sub_folder import lib
      File "project\sub_folder\lib.py", line 1, in <module>
        from sub_folder_lvl2 import lib2
    ImportError: No module named 'sub_folder_lvl2'
    mais fonctionnera en l'exécutant seul puisque le chemin du fichier en cours a été rajouté, là où se trouve le répertoire sub_folder_lvl2.

    Ceci devrait marcher en exécutant main :

    lib.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from sub_folder.sub_folder_lvl2 import lib2
     
    element = lib2.element
    Mais ne fonctionnera pas en exécutant directement lib.py:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "project\sub_folder\lib.py", line 1, in <module>
        from sub_folder.sub_folder_lvl2 import lib2
    ImportError: No module named 'sub_folder'
    Et ceci marchera dans les deux cas, seul et depuis le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import sys, os
    sys.path.insert(1, os.path.dirname(__file__))
     
    from sub_folder_lvl2 import lib2
     
    element = lib2.element
    Et si on place l'ajout du chemin dans __init__.py cela va permettre à tous les autres fichiers du répertoire d'en profiter.

    Et du coup on peut même importer depuis main directement les sous-répertoires :
    main.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from sub_folder_lvl2 import lib2
    Note importante : Il faut faire gaffe aux conflits pour les mêmes noms et être sûr de vouloir placer un sous-répertoire au même niveau.
    Si c'est juste pour du test alors il vaut mieux placer le rajout du répertoire sous la condition __name__ == '__main__' pour ne pas modifier l'arborescence lorsque le fichier est importé.

    Ci-joint l'exemple finalisé.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Comment lancer Eclipse en incluant ses plugins
    Par eclie dans le forum Eclipse Platform
    Réponses: 8
    Dernier message: 19/02/2009, 09h45
  2. Eclipse : Ses Options D'aide
    Par bathof dans le forum Eclipse C & C++
    Réponses: 8
    Dernier message: 24/09/2008, 21h02
  3. Importer ses fichiers java sous eclipse
    Par piotrr dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 25/01/2008, 20h52
  4. [Debutant(e)][eclipse] Comment organiser ses projets ?
    Par Javanaute dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 09/04/2004, 11h07

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