• # Gestion de paquet

    Posté par . En réponse au message python , fichier __init__py & virtualenv .. Évalué à 1.

    __init__.py est un fichier qui défini des paquets python.

    Par exemple, si ta structure de répertoires ressemble à ça :

    $ tree
    .
    └── paquet
     └── fichier.py
    1 directory, 1 file
    

    Et que tu lance python dans le répertoire ..

    $ python
    Python 2.7.8 (default, Apr 15 2015, 09:26:43) 
    [GCC 4.9.2 20150212 (Red Hat 4.9.2-6)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import paquet.fichier
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    ImportError: No module named paquet.fichier
    

    Maintenant, si ta structure de répertoire ressemble à ça :

    $ tree
    .
    └── paquet
     ├── fichier.py
     └── __init__.py
    

    Tu peux faire :

    $ python
    Python 2.7.8 (default, Apr 15 2015, 09:26:43) 
    [GCC 4.9.2 20150212 (Red Hat 4.9.2-6)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import paquet.fichier
    >>> paquet.fichier
    <module 'paquet.fichier' from 'paquet/fichier.py'>
    

    Le fichier __init__.py sera le racine de ton paquet. Par exemple :

    $ cat paquet/__init__.py
    valeur = 1
    $ python
    Python 2.7.8 (default, Apr 15 2015, 09:26:43) 
    [GCC 4.9.2 20150212 (Red Hat 4.9.2-6)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import paquet
    >>> paquet
    <module 'paquet' from 'paquet/__init__.py'>
    >>> paquet.valeur
    1
    

    À la question « pourquoi avoir des import dans ce fichier? » En général c'est pour rendre disponible des fonction/classes qui sont enfoncées profondément dans ton paquet, et les rendre disponible à la racine.

    Comme ceci (NOQA est un commentaire très souvent utilisé pour éviter que pyflakes ne signale les import inutiles) :

    $ tree
    .
    └── paquet
     ├── fichier.py
     ├── __init__.py
     └── souspaquet
     ├── __init__.py
     └── sousfichier.py
    2 directories, 6 files
    $ cat paquet/__init__.py
    from .souspaquet.sousfichier import fonction # NOQA
    $ cat paquet/souspaquet/sousfichier.py
    def fonction(a, b):
     return (a * a) + (b * b)
    $ pythona
    Python 2.7.8 (default, Apr 15 2015, 09:26:43) 
    [GCC 4.9.2 20150212 (Red Hat 4.9.2-6)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from paquet import fonction
    >>> fonction(2, 3)
    13
    

    Ruby est le résultat d'un gamin qui apprend le Java, puis jette un œil à Perl et se dit « je peux le réparer! »