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

Bibliothèques tierces Python Discussion :

Syntaxe d'import avec PIL


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut Syntaxe d'import avec PIL
    Bonjour,

    une petite question toute bête :

    pourquoi ça, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from PIL import Image
    i = Image.open('toto.jpg')
    alors que ça non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import PIL
    i = PIL.Image.open('toto.jpg')
    Il me dit "AttributeError: 'module' object has no attribute 'Image'".
    Ça devrait être la même chose ! Qu'est-ce qui m'échappe ?

    Merci

  2. #2
    Membre Expert 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
    Par défaut
    Bonjour,

    Sans doute car il n'y a rien dans l'__init__ de PIL.

    @+

  3. #3
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Néanmoins je ne comprends pas pourquoi ça fait une différence...
    Le chargement des modules se fait de façon différente suivant qu'on choisisse l'une ou l'autre syntaxe ?

  4. #4
    Membre Expert 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
    Par défaut
    Soit le package Foo (un répertoire donc) avec un fichier __init__.py vide et un fichier untruc.py tels que :
    untruc.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def machin(variable):
        return variable*3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import Foo
    >>> Foo.untruc.machin(3)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'untruc'
    Maintenant avec le fichier __init__.py suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import Foo
    >>> Foo.untruc.machin(3)
    9
    >>> quit()
    Et dans les deux cas from Foo import untruc fonctionne (comprendre dans le répertoire Foo importe untruc).

    @+

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Hu?!? J'ai la plupart du temps des __init__.py "vides" et jamais le comportement que tu rapportes. Comment a été placé le répertoire ou son père dans le path?
    - W
    PS: PIL semble utiliser une fonctionnalité .pth que j'ai trop peu pratiqué pour en connaître les effets de bords.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre Expert 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
    Par défaut
    Bonjour wiztricks,

    Citation Envoyé par wiztricks Voir le message
    Hu?!? J'ai la plupart du temps des __init__.py "vides" et jamais le comportement que tu rapportes.
    Tu m'inquiète : J'ai le même comportement sur mon poste @home (Debian) et sur le portable du taf (Seven)... Et comme cela fait un bon moment donc je m'étais fais une raison...
    Cela ne te dérangerais pas de développer ? Merci d'avance.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Tu m'inquiète : J'ai le même comportement sur mon poste @home (Debian) et sur le portable du taf (Seven)... Et comme cela fait un bon moment donc je m'étais fais une raison...

    Non tu as raison, je me mélange les crayons.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre Expert 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
    Par défaut
    Pas vraiment en fait (je n'utilise pas Python 3):
    __init__.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    __all__ = ['untruc']
    import untruc
    untruc.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def machin(variable):
        return variable*3
    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
    /usr/bin/python2.6
    Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import Foo
    >>> Foo.untruc.machin(3)
    9
    >>> from Foo import untruc
    >>> untruc.machin(3)
    9
    >>> quit()
    /usr/bin/python3.1
    Python 3.1.2 (release31-maint, Sep 17 2010, 20:34:23) 
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import Foo
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "Foo/__init__.py", line 2, in <module>
        import untruc
    ImportError: No module named untruc
    >>> from Foo import untruc
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "Foo/__init__.py", line 2, in <module>
        import untruc
    ImportError: No module named untruc
    La par contre si vous avez une explication...

    Bon code

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from __future__ import absolute_import
    Ah, je crois que j'ai compris mon soucis avec PIL mais il faut que je bosse sur autre chose.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre Expert 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
    Par défaut
    Ah ben oui...
    Compris

    Merci

  11. #11
    Membre Expert 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
    Par défaut
    Bonjour,

    Bien que cela dépasse la question, petite explication pour Captain'Flam (Désolé, je n'avais pas le temps hier) à propos de la différence Python 2/3.

    Python 2 recherche en premier en local puis recherche dans le sys.path.
    Python 3 vas directement dans le sys.path, d'où l'erreur.
    Pour importer untruc en Python 3 il est obligatoire de donner le chemin relatif, soit:

    __init__.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Python 3.1.2 (release31-maint, Sep 17 2010, 20:34:23) 
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import Foo
    >>> Foo.untruc.machin(3)
    9
    Comme cela fonctionne aussi en Python 2.6...
    Enfin, c'est ce a quoi me fait penser le from __future__ import absolute_import de wiztricks.

    Bonne journée @ll

  12. #12
    Membre Expert 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
    Par défaut
    Petit complément d'information pour Captain'Flam.

    Puisque nous avons vu pour import Foo et from Foo import xy voyons ce qu'il en est pour from Foo import *

    avec un __init__.py vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from Foo import *
    >>> untruc.machin(3)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'untruc' is not defined
    __init__.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> from Foo import *
    >>> untruc.machin(3)
    9
    Il y a donc une bonne raison pour que la doc de PIL ne parle que de from PIL import xy.

    @+

  13. #13
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    dingue !

    moi qui croyais que la devise de python c'était du genre :
    "vas-y mon gars ! code à l'instinct, ça marche (presque) toujours"

    bé finalement... pas tellement

    En fait, quand je veux importer une librairie, il faut que je regarde dans son __init__.py pour savoir comment faire...

    Et en plus, si je change de version de python, il faut tout revoir...
    (bon, en même temps, si je change de version il faut s'y attendre)

    Bref !
    Merci infiniment PauseKawa pour ton aide et ta patience, je me coucherai moins bête...

    Hadrien

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

Discussions similaires

  1. syntaxe import avec impdp
    Par knulp dans le forum Administration
    Réponses: 1
    Dernier message: 16/02/2010, 15h44
  2. quel format doit avoir une BD pour l'importer avec copy?
    Par daknoom dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/02/2005, 19h41
  3. [syntaxe]Creation table avec nom dynamique
    Par ZuZu dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 23/09/2004, 18h01
  4. Problème d'import avec l'interface sql server
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/08/2004, 16h00
  5. PB d'import avec les ActiveX sous BCB6
    Par dergen dans le forum C++Builder
    Réponses: 4
    Dernier message: 29/11/2002, 10h18

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