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 :

écrire un fichier __init__.py


Sujet :

Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut écrire un fichier __init__.py
    Salut les pythons,
    après presque 4 ans de python je suis tomber sur un os:
    écrire un fichier __init__.py pour un module ou package car il y a eu une erreur de jugement ma part et je n'ai jamais vue un auteur aborder le sujet dans un de mes bouquins.
    car je pensais que ces fichiers été toujours vide symbolisant une sorte de balisage.
    Puis j'ai attaquer le packaging (d'un de mes modules) et je me suis intéresser a distutils, a cet effet, et boom j'ai appris que ces fichiers ne sont nullement vierge mais servent, d'après ce que je sais a ce sujet pour l'instant, au packaging de fichier de code source de modules, notamment pour les directives d'import d'objet sous la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from mon_module import ma_classe
    le seule truc que je sais et qui reste a préciser et que pour la formule d'import énoncer précédemment: ont peut écrire dans le fichier __init__.py correspondant :
    mais j'ai regarder quelques fichiers __init__.py et ça n'a pas l'air facile.

    Alors si vous voulez bien m'éclairer sur cette terre inconnus de mon être je serai ravis d'apprendre de part vos lumières:

    -Que mettre dans un fichier __init__.py (code python) et comment ça marche (mécanisme sous-jacent) ?

    Si vous avez l'esprit didactique vous pouvez, si vous le désirez bien, me faire un petit topo sinon toute information sous forme de lien, code, truc et astuces a connaître sont la bienvenue.

    Merci pour vos réponses éclairant mon ignorance.

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Bonjour Luke,

    Alors effectivement, quel que soit le livre (le mien y compris je crois), on indique que ce fichier est vide, pour simplifier les choses.*

    Dans les faits, lorsqu'on importe un package contenant plusieurs module et/ou sous package, c'est systematiquement le code contenu dans ce fichier qui est exécuté.

    Aussi il est important de bien le renseigner. Le plus simple est de faire un import de chacun de tes modules et sous-package. dans le __ini__ père. Si tu fais abstrction d'un seul de ces modules/packages, tu ne pourras pas y accéder.

    Il est dans ce cas aussi extremement important de bien documenter les docstrings qui permettront d'obtenir de l'aide sur l'utilisation des diverses classes et fonctions.

    Je me suis toujours limité à cela, et cela m'a toujours suffit jusqu'à présent. Il existe probablement d'autre façon de faire (notamment avec ton __all__) mais je ne peux te renseigner à ce sujet.

    J'espère avoir été assez clair. SInon n'hesite pas a demander plus d'infos.

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

    Pour ce qui est du contenu d'un __init__.py tu peux par exemple y mettre un __version__, des imports dépendants ou encore __path__ pour les packages avec de multiples sous répertoires. etc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    __version__ = "0.1"
    import sys
    if sys.platform == 'linux':
    	blablabla
    Pour ce qui est de __all__ c'est la liste des noms importables. Si __all__ est défini dans l'__init__.py de m comme __all__ = ["m1", "m2"] un from m import m3 ne fonctionneras pas.
    Un from m import * (non recommandé) importeras m1 et m2, même si nous avons m3, m4, m5...
    Suivant le contenu d'un module l’absence d'un __all__ explicite peux amener au fait qu'une partie ne soit pas importable.

    @+

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 435
    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 435
    Points : 37 020
    Points
    37 020
    Par défaut
    Salut,
    Citation Envoyé par Luke spywoker Voir le message
    écrire un fichier __init__.py pour un module ou package car il y a eu une erreur de jugement ma part et je n'ai jamais vue un auteur aborder le sujet dans un de mes bouquins.
    Les bouquins d'initiation permettent d’acquérir le b.a.ba qui vous permettra d’être plus confortable avec la lecture de la documentation officielle et des codes/applications écrites par d'autres ou les sources de Python. Ce b.a.ba est comparable a la maîtrise de la langue française lorsqu'on entre au collège. On sait des choses pour avancer, approfondir... mais rien de ce que nous devrions savoir pour écrire un roman.

    Dans la documentation officielle, vous y trouvez un vrai tuto. qui s'adresse a ceux qui savent déjà programmer dans un autre langage.
    __init__.py, __all__, packages y sont présentes ici.
    Dans la documentation Python, __init__.py est couvert brièvement dans le chapitre sur les import.
    Mais c'est une documentation technique et donc bien plus ardue qu'un tuto.
    C'est assez bref mais "suffisant":
    Python defines two types of packages, regular packages and namespace packages. Regular packages are traditional packages as they existed in Python 3.2 and earlier. A regular package is typically implemented as a directory containing an __init__.py file. When a regular package is imported, this __init__.py file is implicitly executed, and the objects it defines are bound to names in the package’s namespace. The __init__.py file can contain the same Python code that any other module can contain, and Python will add some additional attributes to the module when it is imported.
    Que mettre dans un __init__.py? Ce script n'est exécute qu'au premier import d'un package.
    Il sert a construire l'espace de nom du package, i.e. attributs et objets associes.
    Vous avez des tas de cas d'utilisation dans le "/Lib" de Python:
    • tkinter: __init__.py contient tout le package,
    • logging: un singleton,
    • ...

    Comme c'est de la "programmation", la seule limite est votre imagination (et la revue de code si c'est dans le cadre d'un projet "a plusieurs").
    Si vous voulez un truc qui décoiffe, allez voir étudier l'__init__ de werkzeug.

    - W

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

Discussions similaires

  1. écrire un fichier xml et ajout
    Par robert_trudel dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/06/2006, 15h23
  2. lire/écrire un fichier stocké dans le JAR ?
    Par SheikYerbouti dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 24/03/2006, 11h37
  3. Réponses: 9
    Dernier message: 05/04/2005, 10h39
  4. Comment écrire un fichier texte au format MS-DOS ?
    Par fredfred dans le forum Langage
    Réponses: 9
    Dernier message: 20/01/2005, 10h00
  5. [DOM] Meilleure facçon de lire et d'écrire un fichier XML
    Par newfsch dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 12/05/2004, 11h17

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