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 :

sous module non détecté


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut sous module non détecté
    Bonjour à tous,

    Je suis tout nouveau sur le forum et voici mon premier post.

    Je me forme actuellement sur python. Et pour ce faire, rien de tel que de galérer sur un petit programme.

    J'essaye de me faire une petite application web de base. Afficher des menus et des cases à remplir par l'utilisateur. Générer du coup de nouvelles pages avec du contenu. Le tout devrait être sauvegardé.

    Actuellement, j'en suis au début et à la découverte de cherrypy qui, à première vue, permet de faire facilement de l'affichage web (je suis preneur pour les remarques, si cherrypy n'est pas super ou si il y a mieux).

    Enfin, voici ma question.

    Lors des exercices, j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import cherrypy
     
    ... 
    ... plus bas dans code
    ...
     
    cherrypy.sessions['mystring'] = some_string
    et dans eclipse il y a un problème sur le ".sessions" qui n'est pas reconnu.

    Je pense avoir réglé le problème en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import cherrypy
    from cherrypy.lib.sessions import *
    Mais je trouve ça redondant. Est-ce que l'import de cherrypy n'est pas sensé importer aussi les sous-modules ?

    Merci pour vos lumières !

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Je vais peut-être dire une grosse connerie mais:
    c'est different de:
    J

  3. #3
    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,

    Bienvenue au club

    Citation Envoyé par olibrigus Voir le message
    Mais je trouve ça redondant. Est-ce que l'import de cherrypy n'est pas sensé importer aussi les sous-modules ?
    "import cherrypy" associe "cherrypy" au module mais les noms qui seront définis via cherrypy.* et les modules qui auront été chargés dépendront de ce qui a été codé dans le script __init__.py du package cherrypy. Ce qui évite aussi de charger un tas de modules que vous n'utiliserez pas.

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

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Honnêtement, je m'y perds !

    J'ai laissé uniquement l'import à cherrypy.
    Eclipse, me souligne "session" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cherrypy.session['mystring'] = another_string
    mais le programme fonctionne ....

    Eclipse indique : "Undifined variable from import: session"

    On dirait que python gère bien les imports imbriqués mais que Eclipse a plus de mal !

    C'est vrai que je ne comprends pas bien le fonctionnement car la méthode session() est bien définie dans cherrypy.lib.sessions mais qu'on l'appelle comme ça cherrypy.session() ???

  5. #5
    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 olibrigus Voir le message
    On dirait que python gère bien les imports imbriqués mais que Eclipse a plus de mal !
    Et si vous preniez le temps de comprendre plutôt que de faire des tests hasardeux?
    Le module cherrypy n'a pas d'attribut session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> cherrypy.session
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'session'
    >>>
    Pas plus que le module cherrypy.lib.sessions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import cherrypy.lib.sessions
    >>> cherrypy.lib.sessions.session
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'session'
    qui par contre contient bien un attribut Session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> cherrypy.lib.sessions.Session
    <class 'cherrypy.lib.sessions.Session'>
    >>> help( cherrypy.lib.sessions.Session)
    Help on class Session in module cherrypy.lib.sessions:
    ...
    Pour revenir à la question initiale, rien ne vous empêche de créer votre package/module "test" avec un __init__.py vide.
    Placez dedans un script foo.py qui ne contient que la fonction bar.
    Vous lancez ensuite la console Python:
    Les variables accessibles via test.* sont visibles dans l'espace de noms:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> dir(test)
    ['__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '__path__']
    >>>
    Il n'y a pas de "foo" et encore moins de "foo.bar" la dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> test.foo.bar
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'foo'
    >>>
    Maintenant, on ajoute "from . import foo" dans le fichier __init__.py (qui était vide) et on relance la console Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import test
    >>> dir(test)
    ['__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', 
    '__name__', '__package__', '__path__', 'foo']
    Nous avons un attribut "foo".... et on peut appeler la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> test.foo.bar()
    i am foo.bar
    >>>
    => La hiérarchie des scripts/modules au sens fichiers est une chose "statique".
    Le développeur vous en montre ce qu'il veut en codant son __init__.py qui sera exécuté lors de l'import i.e. on est dans le "dynamique".

    Pour ce qui est des indications d'Eclipse, c'est un autre problème.
    Je suppose que vous avez installé cherrypy après avoir configuré l'interpréteur.
    Dans ce cas, Eclipse/PyDev n'a pas construit sa table de symbole pour savoir ce qui est défini dans les différents module de cherrypy.
    Il faut reconstruire "l'interpreteur", i.e. le détruire (au sens Eclipse/PyDev) et le rajouter...

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

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci W !

    Donc c'est le __init.py__ qui détermine ce qui est importé lors de la commande "import module". Je pensais que l interpréteur parcourait le code et donc connaissait toutes les méthodes, fonctions, variables, ...

  7. #7
    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
    super, pensez à marquer la discussion
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/06/2011, 11h41
  2. Wifi non détectée sous Fedora 14
    Par proganas dans le forum Réseau
    Réponses: 6
    Dernier message: 09/03/2011, 09h17
  3. Disque dur sata non détecté sous win 7
    Par AngeDéchu dans le forum Windows 7
    Réponses: 1
    Dernier message: 28/02/2010, 17h23
  4. Java virtual machine non détectée sous linux
    Par Battant dans le forum Général Java
    Réponses: 3
    Dernier message: 31/07/2008, 20h16
  5. Carte réseau non détectée sous Win XP
    Par maddog2032 dans le forum Hardware
    Réponses: 10
    Dernier message: 20/10/2005, 11h54

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