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.pycontenant:
def factorial(n):
return 1 if n == 0 else n * factorial(n - 1)
- Importer le fichier
fact.pydans 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 automatique:
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.pyou./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__.pypeuvent être vides ou contenir du code import my_moduledé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
venvpour 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