Les modules

Références

Les modules

Un module est un fichier contenant les définitions des déclarations Python. Le nom du fichier est le nom du module plus l’extension .py. Ce nom est stocké dans une variable globale __name__.

Exemple d’un fichier fibo.py :

# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

def fib2(n):   # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a)
        a, b = b, a+b
    return resultv

Si on ouvre in interpréteur dans le même dossier, on peut importer ce module pour l’utiliser.

import fibo

le nom du module devient disponible dans les symboles de l’interpréteur. Il faut utiliser la notation pointé pour accéder aux fonctions du module :

fibo.fib(100)

Spécifier ce que l’on importe

 from fibo import fib, fib2

Ici le nom du module n’est plus dans la liste des symboles mais les deux fonctions fib et fib2 y sont.

On peut aussi importer tout, mais c’est une mauvaise pratique :

 from fibo import *

On peut renommer les imports :

from fibo import fib as fibonacci

Exécution de modules comme des scripts

Quand un module est exécuté comme un script sa propriété __name__ vaut "__main__". Cela permet de prévoir un comportement différent du mode module, quand on exécute le fichier. Par exemple on va avoir un script principal qui gère les paramètres en ligne commande :

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

Localisation des modules

quand un module est importé, python le recherche dans différents fichiers données par la valeur de sys.path :

import sys
sys.path
['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/personnel/pigney/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']

Fichiers Python “compilés”

On trouve dans un dossier contenant des modules un sous-dossier __pycache__. Pour chaque module du dossier il y a un fichier .pyc équivalant dans __pycache__. Des versions compilés des fichiers source s’y trouve. Les fichiers compilés sont chargés plus rapidement par Python. Après le chargement le temps d’exécution est le même pour les fichier compilés que pour les sources.

Modules standards

Python est livré avec un grand nombre de modules. Liste des modules de python 3

Les packages

On peut organiser plusieurs modules (sous-modules) ensembles pour former un packet (package). Ces packets regroupent plusieurs modules sous une arborescence commune.

my_pkg/
    - models/
      - person.py
      - thing.py
    - views
      - fpv.py
      - aerial.py
from my_pkg.fpv import camera

installation

Les packages tiers proposés par d’autres sont utilisables en les téléchargeant et en les mettant dans un des dossiers du sys.path. Des utilitaires comme pip nous facilite le travail.

Hébergement

Les outils comme pip vont télécharger les packages pythons depuis l’index des packets pythons (PyPI): https://pypi.org

gestion des dépendances

Les packages peuvent être publiés à plusieurs degrés de maturité. Ils sont donc versionnés. Quand on installe un package on installe une version précise.

Ou installer les packages ?

Les packages s’installent dans l’un des dossiers de sys.path. on peut voir 3 niveaux :

gestion des versions des packages et de python

Pour gérer efficacement les dépendances et les interpréteurs, on utilise le projet Pipenv.

Exercice facultatif

Mise en application de l’utilisation des packages avec pipenv et utilisation d’un package de réalisation de graphiques.

Le but est de reprendre le tableur des résultats du bac 2016 pour proposer un graphique similaire à celui-ci :

cam

Les étapes :