Scripts et modules Python
PG121 - Modules, scripts et packages Python
Frédéric Herbreteau, Bordeaux INP/LaBRI (frederic.herbreteau@bordeaux-inp.fr)
Utiliser un module existant
>>> import math
>>> math.floor(2.3)
2
>>> math.lcm(6,3,5)
30
>>> import random as rd
>>> rd.seed(23700237)
>>> rd.randrange(10) # returns a random integer in 0..9
4
Le fichier .py
du module doit se trouver dans le répertoire courant ou dans un répertoire listé dans la variable sys.path
(extensible via la variable d’environnement PYTHONPATH
)
Créer un nouveau module
- Un module sert à structurer le code en unités fonctionnelles, qui peuvent être réutilisées dans d’autres programmes
- Créer un fichier
fact.py
contenant:
def factorial(n):
return 1 if n == 0 else n * factorial(n - 1)
- Importer le fichier
fact.py
dans l’interface REPL:
>>> import fact
>>> help(fact)
>>> help(fact.factorial)
>>> fact.factorial(5)
120
Documenter un module
- Renseigner
help
: docstrings""" """
(cf. PEP 257) - indications de typage (non vérifiées à l’exécution)
- Quelques recommandations
"""
Module de calcul de la fonction factorielle
Ce module propose des implémentations de la fonction factorielle
"""
# Implémentation récursive directe de n!
def factorial(n : int ) -> int:
"""Retourne la factorielle de n, avec n >= 0."""
return 1 if n == 0 else n * factorial(n - 1)
Large bibliothèque de modules
- Bibliothèque standard Python (cf. index des modules):
re
,math
,random
,os
,io
,argparse
,threading
,json
,tkinter
,pdb
,sys
,… - Bibliothèques annexes:
- calcul scientifique:
numpy
,scipy
- analyse de données:
pandas
- visualisation:
matplotlib
,plotly
- apprentissage automaituqe:
tensorflow
,pytorch
,scikit-learn
,keras
- programmation web:
requests
,flask
(+ framework:django
) - manipulation d’images:
PIL
/pillow
,scikit-image
,OpenCV-python
- …..
- calcul scientifique:
Scripts
#!/usr/bin/env python
def factorial(n):
"""Retourne la factorielle de n, avec n >= 0."""
return 1 if n == 0 else n * factorial(n - 1)
if __name__ == '__main__':
n = int(input('Entrez un nombre >= 0: '))
print(f'{n}! est égale à {factorial(n)}')
- Exécution dans un shell:
python fact.py
ou./fact.py
(chmod u+x fact.py
):
$ ./fact.py
Entrez un nombre >= 0: 5
5! est égale à 120
- Toujours utilisable comme un module via
import fact
Packages
- modules constitués de plusieurs fichiers (cf. documentation des packages)
my_module/
|- __init__.py
|- file1.py
|- file2.py
| - sub_module/
| |- __init__.py
...
- les fichiers
__init__.py
peuvent être vides ou contenir du code import my_module
déclenche la recherche danssys.path
:- d’un fichier nommé
my_module.py
- ou d’un fichier
my_module/__init__.py
- d’un fichier nommé
Installation de modules et gestion de dépendances
- installation et gestion des modules avec:
pip
,venv
,conda
,poetry
,… - environnements virtuels
venv
pour gérer les dépendances spécifiques à chaque projet
$ python -m venv <directory> # création d'un env. virtuel dans "directory"
$ source <directory>/bin/activate # activation de l'environnement
$ # utilisation de python, pip, etc (versions installées dans <directory>)
$ deactivate # désactivation de l'environnement
- un environnement peut être activé et désactivé à volontée