Les modules et les packages en python

Jusqu'à présent nous avons réussi à créer des petits morceaux de code sans grand intérêt car très peu ambitieux. Le problème de l'interpréteur c'est qu'une fois celui-ci fermé votre travail est perdu.

L'idée d'un programme c'est d'enregistrer votre travail dans un fichier et ensuite de l'exécuter. Cela augmente votre productivité mais possède de nombreux avantages comme le copier-coller massif ou tout simplement le travail collaboratif. Lorsque du code est enregistré dans un fichier exécutable on parle de script.

Créer son premier script python

Tout d'abord vous devez créer un fichier avec l'extension .py -dans notre exemple on le nommera fiche.py - dans le dossier que vous voulez (l'emplacement n'a aucune importance).

Ouvrez ensuite le fichier.

Hello world

Le traditionnel hello world se fait ainsi:

#!/usr/bin/python2.7
#-*- coding: utf-8 -*-
print "Bonjour monde"

La première ligne indique qu'il s'agit de code python.
La deuxième ligne indique le type d'encodage utilisé. Je vous conseille toujours quelque soit votre projet et votre langage de programmation de passer par de l'UTF-8 et la troisème ligne vous connaissez déjà.

Exécuter un script python

Pour exécuter un script python sur ubuntu il vous suffit de lancer la commande suivante:

python /chemin_vers_votre_script/fiche.py

Faire interagir l'utilisateur

Un programme n'est pas très intéressant si l'utilisateur ne peut pas dialoguer avec celui-ci.

On va créer un petit script qui demande l'âge à l'utilisateur et on affichera cette valeur par la suite:

#!/usr/bin/python2.7
#-*- coding: utf-8 -*-

age = input("Quel est votre age? : ")
print "Vous avez %d ans" % age

A noter que si vous travaillez avec python 2.7, il est impossible de faire passer des données autres que numériques à la fonction input, pour python 2.7 on préférera utiliser la fonction raw_input qui fait sensiblement la même chose.

Les commentaires en python

Que vous soyez seul à développer vos scripts ou à plusieurs, il sera toujours indispensable de commenter votre travail. Par exemple si vous créez une fonction qui s'étale sur des centaines de lignes de code, il sera plus efficace d'écrire un petit descriptif de votre fonction au dessus de celle-ci plutôt que de devoir relire tout le code pour comprendre cette fonction des mois plus tard.

Les commentaires en python commencent par le signe #

Exemple:

#!/usr/bin/python2.7
#-*- coding: utf-8 -*-

# Cette fonction pose une question à l'utilisateur 
# et celui-ci devra répondre par un nombre obligatoirement

age = input("Quel est votre age? : ")
print "Vous avez %d ans" % age

Importer des fonctions d'autres fichiers

Pour les projets les plus ambitieux il sera vite important d'organiser son travail. Les fonctions vont se multiplier et il faudra les enregistrer dans des fichiers distincts pour plus de flexibilité.

Créons un autre fichier que nous nommerons func.py dans le même dossier que le fichier fiche.py

func.py

#!/usr/bin/python2.7
#-*- coding: utf-8 -*-

def ajoute_un(v):
	return v + 1

fiche.py

#!/usr/bin/python2.7
#-*- coding: utf-8 -*-

from func import *

age = input("Quel est votre age? : ")
print "Vous avez %d ans" % age

age_plus_un = ajoute_un(age)

print "Dans un an vous aurez %d ans" % age_plus_un

Instructions, fonctions, modules, packages

Nous avons donc vu que lorsque l'on regroupe des fonctions dans un fichier on crée un ensemble de fonctions que l'on nomme "module".

Lorsque l'on cherche à regrouper des modules, on parle de package.

Créer un package

Pour créer votre propre package, commencez par créer dans le même dossier que votre programme - un dossier portant le nom de votre package. Dans notre exemple, nous le nommerons "utils".

Dans ce dossier, créons le fichier suivant: __init__.py, cela indique à python qu'il s'agit d'un package. Ce fichier peut être vide, seule sa présence est importante.

Ensuite créons un fichier toujours dans ce réportoire utils que nous nommerons par exemple "operations.py"

Contenu du dossier de votre projet:

Contenu du dossier utils:

Maintenant éditons le fichier operations.py et créons une nouvelle fonction

#!/usr/bin/python2.7
#-*- coding: utf-8 -*-

def ajoute_deux(v):
	return v + 2

Puis ajoutons un appel vers cette fonction dans le fichier fiche.py

#!/usr/bin/python2.7
#-*- coding: utf-8 -*-

from func import *
from utils.operations import ajoute_deux

age = input("Quel est votre age? : ")
print "Vous avez %d ans" % age

age_plus_un = ajoute_un(age)

print "Dans un an vous aurez %d ans" % age_plus_un

age_plus_deux = ajoute_deux(age)

print "Dans un an vous aurez %d ans" % age_plus_deux

Alors que remarque-t-on? Tout d'abord on importe un package avec les mots clé from et import, ensuite pour appeler une fonction précise, on passe par la hiérarchie suivante:

from package.module import fonction

Si vous voulez importer toutes les fonctions d'un module, vous pouvez indiquer une étoile * qui signifie souvent en informatique "TOUS".

Les modules de python

Voici une liste de modules de base que vous serez amené un jour ou l'autre à utiliser.

random   : fonctions permettant de travailler avec des valeurs aléatoires
math     : toutes les fonctions utiles pour les opérations mathématiques (cosinus,sinus,exp,etc.)
sys      : fonctions systèmes
os       : fonctions permettant d'interagir avec le système d'exploitation
time     : fonctions permettant de travailler avec le temps
calendar : fonctions de calendrier
profile  : fonctions permettant d'analyser l'execution des fonctions
urllib2  : fonctions permettant de récupérer des informations sur internet
re       : fonctions permettant de travailler sur des expressions régulières

Les extensions des fichiers python

Il existe plusieurs extensions de fichier qui tournent autour de python:

.py  -> script modifiable
.pyc -> script compilé
.pyw -> script executé sans lancement de terminal (sous windows)