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 :

Retrouver l'import ?


Sujet :

Python

  1. #1
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut Retrouver l'import ?
    Bonjour,

    Comment retrouver la façon utilisée pour faire un import ?
    Par exemple pour les imports suivants:
    import Tkinter
    from tkinter import *
    import tkinter as tk

    Bien sur j'ai la possibilité de tester cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import sys
    if 'Tkinter' in sys.modules.keys():
        tk=sys.modules['Tkinter']
    elif 'tkinter' in sys.modules.keys():
        tk=sys.modules['tkinter']
    else:
        try:
            import tkinter as tk
        except:
            import Tkinter as tk
    Mais existe t il une possibilité de le savoir directement ?

    Merci d'avance.
    Merci d'utiliser le forum pour les questions techniques.

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Dans le principe, on peut ajouter tout ce que l'on veut dans
    "C:/Pythonxx/Lib/site-packages"
    Supposons que tu veuilles ajouter un module "toto", if faut créer un répertoire "toto" dans "C:/Python27/Lib/site-packages" et y mettre un fichier
    "__init__.py"
    contenant les lignes d'import de ce que tu veux, à condition que ce soit dans ce répertoire précis. Après, de n'importe où, tu peux faire un
    import toto
    ou un
    from toto import...
    il est assez facile de lister tous les répertoires contenant un fichier
    "__init__.py"
    j'y ai trouvé mathplotlib, numpy, serial etc...
    Les modules inclus par contre dans l'install python (Tkinter par exemple) se trouvent dans des dossiers à la même hauteur que
    "C:/Python27/Lib/site-packages"
    Et là, je n'en sais pas plus.

    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
    27
    28
    29
    30
    31
    32
    33
    import os
    import Tkinter
    import string
     
    default_path = 'C:/PYTHON27'
    modules_rel_path = 'Lib/site-packages'
    modules_key_fname = '__init__.py'
    root=Tkinter.Tk()
    path_var = Tkinter.StringVar()
    path_var.set(default_path)
     
    def listModules():
        items = os.listdir(os.path.join(path_var.get(), modules_rel_path))
        installed_modules = []
        for item in items:
            itemfullname = os.path.join(os.path.join(path_var.get(), modules_rel_path), item)
            if os.path.isdir(itemfullname):
                fname = os.path.join(itemfullname, modules_key_fname)
                if os.path.exists(fname):
                    installed_modules.append(item)
        text = "<Added modules in %s>\n\n"%(default_path)
        if len(installed_modules) == 0:
            text += "<NO MODULE FOUND>"
        else:
            text += string.join(installed_modules, '\n')
        temp_win = Tkinter.Toplevel(root)
        temp_win.title("Added modules in %s"%(default_path))
        Tkinter.Label(temp_win, text=text).grid()
     
    Tkinter.Entry(root, textvar=path_var).grid(row=0, column=0)
    Tkinter.Button(root, text='List modules', command=listModules).grid(row=0, column=1)
     
    root.mainloop()
    A+

    Pfeuh

  3. #3
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonsoir,

    Dans le principe, on peut ajouter tout ce que l'on veut dans
    "C:/Pythonxx/Lib/site-packages"
    Supposons que tu veuilles ajouter un module "toto", if faut créer un répertoire "toto" dans "C:/Python27/Lib/site-packages" et y mettre un fichier
    "__init__.py"
    Oui effectivement le "__init__.py" s'utilise également pour tous les répertoires relatifs(enfants) au script en cours, ainsi que pour tous les répertoires relatifs(enfants) aux répertoires contenus dans sys.path.

    Les modules inclus par contre dans l'install python (Tkinter par exemple) se trouvent dans des dossiers à la même hauteur que
    "C:/Python27/Lib/site-packages"
    Et là, je n'en sais pas plus.
    Si ce que veut faire PauseKawa c'est bien définir un dossier d'imports alors il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    sys.path.append(my_path)
    bien entendu my_path doit être un chemin absolu.

    @+ et bon code
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Je me suis sans doute mal expliqué, pour changer.

    Dans A j'importe Tkinter (pour l'exemple).
    Dans A j'importe classB
    Dans classB je souhaite savoir comment Tkinter est importé dans A.

    Dans les dico pas possible de savoir cela.

    Merci d'avance.
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Bonsoir,

    Je ne vois pas vraiment l'utilité. Si tu as besoin de Tkinter dans classB, ben tu l'importes dans classB. Ce que tu fais manuellement en allant voir dans sys.modules si le module est chargé, le mécanisme d'import le fait déjà à ta place.

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour dividee,

    Loin de moi l'idée de refaire un 'import' ou toute réinvention de la roue.
    Cela fonctionne très bien comme cela.

    Ma question n'as pour but qu'une information personnelle et éventuellement, d'éviter les imports multiples d'un même module.

    A prendre comme question théorique donc.
    Merci d'utiliser le forum pour les questions techniques.

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

    import toto ou import toto as tutu iront créer les symboles toto et tutu dans le globals() correspondant au module toto.

    "from toto import *" ramène tous les symboles de toto dans globals()... Mais ils seront 'taguées' avec un attribut __module__ qui sera toto.

    => ce qui *à priori*, devrait répondre à la question pour chaque symbole qui est dans globals()

    Mais je ne suis pas sur d'avoir tout compris, désolé.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour wiztricks,

    Effectivement la lecture des keys:values du dico permet de retrouver le type d'import.
    C'est bien plus simple avec globals() et je me suis trituré les méninges pour rien.

    Merci
    Merci d'utiliser le forum pour les questions techniques.

  9. #9
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonjour,

    Donc en definitive pour savoir qu un module a ete importe il faut le re-importer et regarder s il existe comme valeur dans le globals() ?
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Citation Envoyé par afranck64 Voir le message
    Donc en definitive pour savoir qu un module a ete importe il faut le re-importer et regarder s il existe comme valeur dans le globals() ?
    Pourquoi le ré-importer?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Pas du tout. Il suffit de regarder globals().

    Dans le cadre d'un import x ou d'un import x as y tu retrouve x: <module 'x' from '...x.pyc'> ou y: <module 'x' from '...x.pyc'>. C'est la clé qui te permet de savoir comment c'est importé.
    Pour un from x import * tu retrouve dans globals() des 'tutu': <class x.tutu at 0xb778aaac

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Un exemple avec Tkinter:
    >>> import Tkinter
    >>> print globals()
    {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'Tkinter': <module 'Tkinter' from '/usr/lib/python2.6/lib-tk/Tkinter.pyc'>, '__doc__': None, '__package__': None}
    >>> import Tkinter as tk
    >>> print globals()
    {'Tkinter': <module 'Tkinter' from '/usr/lib/python2.6/lib-tk/Tkinter.pyc'>, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'tk': <module 'Tkinter' from '/usr/lib/python2.6/lib-tk/Tkinter.pyc'>, '__name__': '__main__', '__doc__': None}
    >>> from Tkinter import *
    >>> print globals()
    {'getdouble': <type 'float'>, 'MULTIPLE': 'multiple', 'TypeType': <type 'type'>, 'mainloop': <function mainloop at 0xb7787ae4>, 'Canvas': <class Tkinter.Canvas at 0xb778aaac>
    Si tu recherche la manière dont est importé x cela donne:
    Si tu trouve un <class x. dans les values de globals() c'est un from x import
    Si tu trouve un <module 'x' from cela dépend de la clé: Si c'est x c'est un import x et si c'est autre chose c'est un import x as ce que tu trouve.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  12. #12
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonjour,

    Merci pour l info moi je pensais juste a faire une comparaison de valeurs, je n ai pense a juste chercher un nom.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

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

Discussions similaires

  1. Retrouver la bibliothèque utilisée par un import
    Par mongolic dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 26/08/2010, 23h29
  2. Réponses: 2
    Dernier message: 03/10/2009, 07h51
  3. retrouver path d'un fichier de l'action import
    Par dida.ratsimba dans le forum W4 Express
    Réponses: 3
    Dernier message: 12/11/2008, 15h18
  4. Réponses: 1
    Dernier message: 17/05/2006, 21h03
  5. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53

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