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 :

Package et __init__.py


Sujet :

Python

  1. #1
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut Package et __init__.py
    Bonjour à tous,

    Python version: 3.0.1 (CPython) / O.S : Windows

    Voilà un peu plus de 5 mois que je fais quotidiennement du python. Je développe actuellement un package à mes heures perdues. Au début j'ai commencé avec un seul module puis j'ai finalement "éclaté" le code en divers modules. Se pose aujourd'hui la gestion du package et notamment du fichier __ini__.py.

    Je dispose d'un module "global" (global.py) que tous mes autres modules importent. Ce module contient uniquement des variables globales (en petit nombres fort heureusement) nécessaires à tous les autres modules et quelques fonctions d'initialisation.

    J'ai beau relire la doc concernant les modules et packages je ne suis pas sur de la manière de procéder quant à ce qui serait considéré comme une "bonne pratique" python.

    Prenons un exemple:

    Mes modules ont une forte intégration avec Windows, du notamment à une utilisation de l'API de ce système via ctypes. Je voudrais faire au moins une fonction d'initialisation qui vérifie si l'utilisateur de mon package se trouve sur un système Windows (dans la négative il serait inutile d'aller plus loin).

    Est-il possible de mettre cette fonction dans le fichier __init__.py ?

    Quid des quelques variables globales utilisées dans le module global.py ? Est-il possible de les mettre dans __init__.py ou vaut-il mieux les laisser dans global.py et utiliser ce dernier dans __init__.py et faire un import de ce module dans chacun des autres modules ?

    Merci à vous

  2. #2
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    admettons les scripts suivants:
    __init__.py:
    x.py :
    y.py :
    zeTest.py :
    admettons l'arborescence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [ Dummy ]-+-[ test ]-+-< __init__.py
              |          +-< x.py
              |          +-< y.py
              |
              +-< zeTest.py
    dans __init__.py, j'ai importé tous les modules, ce qui nous permet par la suite de n'avoir à taper que "from test import *" (dans zeTest.py), ce qui est strictement équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import test.x as x
    import test.y as y
    Mais beaucoup plus court et moins fastidieux... si en plsu par la suite tu ajoutes un module au dossier test, il n'y aura qu'a le rajouter dans la liste des modules à importer de __init__.py. C'est une question de goût, mais moi j'aime bien cette façon de faire.

    Ensuite __init__.py est un module comme les autres, tu peux effectivement mettre des variables globales, verifier le système courant et alors importer les modules, ou non et alors lever une Exception (enfin, gaffe aux importation circuaires !). Perso je me servirai juste de __init__.py pour vérifier le system et importer tous les modules, et reserverait un script pour les variables globales. La vérification du système se fait grâce au module sys je crois, ou os (je penche plus pour sys). Direction python .org pour leur docs

    Je pense qu'il est tout à fait inutile que je te le précise (mais sait-on jamais ) les variables globale que tu importera ne seront globales qu'au sein du module à partir duquel tu aura lancé les imports

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour N.tox,

    merci beaucoup pour ta réponse très complète et qui lève pas mal de doute

    J'ai aussi regardé de près au fichier __init__.py de ctypes pour voir ce qu'il faisait, ce qui rajoute à tes explications.

    Hum, la précision finale n'était pas superflue J'aurais pu me faire avoir !

    Merci encore. Je reviendrais si j'ai d'autres problèmes...

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    Je voudrais faire au moins une fonction d'initialisation qui vérifie si l'utilisateur de mon package se trouve sur un système Windows (dans la négative il serait inutile d'aller plus loin).
    Ceci devrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/env python
    #coding=utf-8
     
    import sys
     
    # Voir ici : http://docs.python.org/library/sys.html
    #        http://python.developpez.com/faq/?page=Generalites#GenInfoSystemPython
    print sys.platform

  5. #5
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Hello,

    merci rambc pour cette indication supplémentaire.

    A priori, les modules 'sys', 'os' et 'platform' remplissent à divers degrés ce que je cherche.

    Encore merci à vous pour vos réponses !

  6. #6
    Membre actif
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 240
    Points : 275
    Points
    275
    Par défaut
    Hello all,

    Bon je reprend un peu le topic qui date un peu (quoi que il n'a qu'un an) mais j'ai exactement le même soucis ... enfin a une nuance prés :

    Le schéma de N.tox est il toujours correct dans le cas où on utilise des classes ? (je c la quetsion peut paraitre bête)

    Dans mon cas j'ai des messages d'erreur...

    et deuxième question : je comptais faire 1 fichier = 1 classe est ce selon vous correct comme marche à suivre ? Je trouve ça plus visuel, la maintenance est plus simple de cette façon.

    Je tiens à préciser que je suis débutant sur le python (mon dada normalement c'est le vb et le C)

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

Discussions similaires

  1. Création de package et __init__.py non fonctionnel
    Par Faith's Fall dans le forum Général Python
    Réponses: 2
    Dernier message: 10/05/2014, 13h13
  2. Package devC++
    Par Fl0r3nt dans le forum Dev-C++
    Réponses: 15
    Dernier message: 29/10/2003, 14h42
  3. [JCreator] "package tools does not exists"
    Par snyper147 dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 04/05/2003, 20h08
  4. [Packages] Problème d'organisation
    Par lolo... dans le forum JBuilder
    Réponses: 5
    Dernier message: 22/04/2003, 13h05
  5. Vue Packages
    Par ced dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/04/2003, 08h32

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