bibliothèque standard¶
un grand nombre d’outils installés d’office
pour des tâches très variées
voir liste complète
cette boite à outils est exposée au travers de modules
que l’on peut charger dans son appli grâce au mot-clé import
import
¶
# import permet de charger un code
import math
# cela définit une variable, ici 'math'
# qui est une référence
# vers un objet module
math
type(math)
module
# cet objet possède des attributs
# auxquels on peut accéder
# avec la notation module.attribut
math.pi
3.141592653589793
autres formes¶
# avec cette forme on ne définit pas la variable math
# mais directement la variable pi
from math import pi
pi
3.141592653589793
# ici on n'a importé que le nom 'pi'
# et donc 'cos' n'est pas défini
# mais grâce au 'import math'
# on peut y accéder par math.cos
math.cos(pi)
-1.0
installation de librairies tierces¶
si on a besoin d’installer un module
qui ne fait pas partie de la bibliothèque standard :
- répertoire disponible sur https://pypi.org/
- installation à faire avec l’outil
pip
(se lance depuis le terminal)
# cette astuce avec le ! me permet
# d'appeler une commande normalement destinée au terminal
# mais depuis Python
!pip install nbautoeval
Defaulting to user installation because normal site-packages is not writeable
Collecting nbautoeval
Downloading nbautoeval-1.8.0-py3-none-any.whl.metadata (5.0 kB)
Requirement already satisfied: ipython in /home/runner/.local/lib/python3.12/site-packages (from nbautoeval) (9.5.0)
Requirement already satisfied: ipywidgets in /home/runner/.local/lib/python3.12/site-packages (from nbautoeval) (8.1.7)
Collecting myst-parser (from nbautoeval)
Downloading myst_parser-4.0.1-py3-none-any.whl.metadata (5.5 kB)
Requirement already satisfied: numpy in /home/runner/.local/lib/python3.12/site-packages (from nbautoeval) (2.3.3)
Requirement already satisfied: pyyaml in /usr/lib/python3/dist-packages (from nbautoeval) (6.0.1)
Requirement already satisfied: decorator in /home/runner/.local/lib/python3.12/site-packages (from ipython->nbautoeval) (5.2.1)
Requirement already satisfied: ipython-pygments-lexers in /home/runner/.local/lib/python3.12/site-packages (from ipython->nbautoeval) (1.1.1)
Requirement already satisfied: jedi>=0.16 in /home/runner/.local/lib/python3.12/site-packages (from ipython->nbautoeval) (0.19.2)
Requirement already satisfied: matplotlib-inline in /home/runner/.local/lib/python3.12/site-packages (from ipython->nbautoeval) (0.1.7)
Requirement already satisfied: pexpect>4.3 in /usr/lib/python3/dist-packages (from ipython->nbautoeval) (4.9.0)
Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /home/runner/.local/lib/python3.12/site-packages (from ipython->nbautoeval) (3.0.52)
Requirement already satisfied: pygments>=2.4.0 in /usr/lib/python3/dist-packages (from ipython->nbautoeval) (2.17.2)
Requirement already satisfied: stack_data in /home/runner/.local/lib/python3.12/site-packages (from ipython->nbautoeval) (0.6.3)
Requirement already satisfied: traitlets>=5.13.0 in /home/runner/.local/lib/python3.12/site-packages (from ipython->nbautoeval) (5.14.3)
Requirement already satisfied: comm>=0.1.3 in /home/runner/.local/lib/python3.12/site-packages (from ipywidgets->nbautoeval) (0.2.3)
Requirement already satisfied: widgetsnbextension~=4.0.14 in /home/runner/.local/lib/python3.12/site-packages (from ipywidgets->nbautoeval) (4.0.14)
Requirement already satisfied: jupyterlab_widgets~=3.0.15 in /home/runner/.local/lib/python3.12/site-packages (from ipywidgets->nbautoeval) (3.0.15)
Collecting docutils<0.22,>=0.19 (from myst-parser->nbautoeval)
Downloading docutils-0.21.2-py3-none-any.whl.metadata (2.8 kB)
Requirement already satisfied: jinja2 in /usr/lib/python3/dist-packages (from myst-parser->nbautoeval) (3.1.2)
Requirement already satisfied: markdown-it-py~=3.0 in /usr/lib/python3/dist-packages (from myst-parser->nbautoeval) (3.0.0)
Requirement already satisfied: mdit-py-plugins>=0.4.1,~=0.4 in /home/runner/.local/lib/python3.12/site-packages (from myst-parser->nbautoeval) (0.5.0)
Collecting sphinx<9,>=7 (from myst-parser->nbautoeval)
Downloading sphinx-8.2.3-py3-none-any.whl.metadata (7.0 kB)
Requirement already satisfied: parso<0.9.0,>=0.8.4 in /home/runner/.local/lib/python3.12/site-packages (from jedi>=0.16->ipython->nbautoeval) (0.8.5)
Requirement already satisfied: mdurl~=0.1 in /usr/lib/python3/dist-packages (from markdown-it-py~=3.0->myst-parser->nbautoeval) (0.1.2)
Requirement already satisfied: wcwidth in /home/runner/.local/lib/python3.12/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython->nbautoeval) (0.2.13)
Collecting sphinxcontrib-applehelp>=1.0.7 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading sphinxcontrib_applehelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-devhelp>=1.0.6 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading sphinxcontrib_devhelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-htmlhelp>=2.0.6 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-jsmath>=1.0.1 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting sphinxcontrib-qthelp>=1.0.6 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading sphinxcontrib_qthelp-2.0.0-py3-none-any.whl.metadata (2.3 kB)
Collecting sphinxcontrib-serializinghtml>=1.1.9 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl.metadata (2.4 kB)
Collecting snowballstemmer>=2.2 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading snowballstemmer-3.0.1-py3-none-any.whl.metadata (7.9 kB)
Collecting babel>=2.13 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading babel-2.17.0-py3-none-any.whl.metadata (2.0 kB)
Collecting alabaster>=0.7.14 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading alabaster-1.0.0-py3-none-any.whl.metadata (2.8 kB)
Collecting imagesize>=1.3 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading imagesize-1.4.1-py2.py3-none-any.whl.metadata (1.5 kB)
Requirement already satisfied: requests>=2.30.0 in /usr/lib/python3/dist-packages (from sphinx<9,>=7->myst-parser->nbautoeval) (2.31.0)
Collecting roman-numerals-py>=1.0.0 (from sphinx<9,>=7->myst-parser->nbautoeval)
Downloading roman_numerals_py-3.1.0-py3-none-any.whl.metadata (3.6 kB)
Requirement already satisfied: packaging>=23.0 in /usr/lib/python3/dist-packages (from sphinx<9,>=7->myst-parser->nbautoeval) (24.0)
Requirement already satisfied: executing>=1.2.0 in /home/runner/.local/lib/python3.12/site-packages (from stack_data->ipython->nbautoeval) (2.2.1)
Requirement already satisfied: asttokens>=2.1.0 in /home/runner/.local/lib/python3.12/site-packages (from stack_data->ipython->nbautoeval) (3.0.0)
Requirement already satisfied: pure-eval in /home/runner/.local/lib/python3.12/site-packages (from stack_data->ipython->nbautoeval) (0.2.3)
Downloading nbautoeval-1.8.0-py3-none-any.whl (47 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/47.9 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 47.9/47.9 kB 3.3 MB/s eta 0:00:00
Downloading myst_parser-4.0.1-py3-none-any.whl (84 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/84.6 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.6/84.6 kB 6.0 MB/s eta 0:00:00
Downloading docutils-0.21.2-py3-none-any.whl (587 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/587.4 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 587.4/587.4 kB 23.7 MB/s eta 0:00:00
Downloading sphinx-8.2.3-py3-none-any.whl (3.6 MB)
━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/3.6 MB 36.7 MB/s eta 0:00:01
━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━ 2.2/3.6 MB 30.4 MB/s eta 0:00:01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 3.6/3.6 MB 30.9 MB/s eta 0:00:01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 24.1 MB/s eta 0:00:00
Downloading alabaster-1.0.0-py3-none-any.whl (13 kB)
Downloading babel-2.17.0-py3-none-any.whl (10.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/10.2 MB ? eta -:--:--
━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/10.2 MB 32.3 MB/s eta 0:00:01
━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/10.2 MB 20.3 MB/s eta 0:00:01
━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━ 4.7/10.2 MB 24.7 MB/s eta 0:00:01
━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━ 6.6/10.2 MB 27.6 MB/s eta 0:00:01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━ 8.1/10.2 MB 28.8 MB/s eta 0:00:01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 10.2/10.2 MB 29.6 MB/s eta 0:00:010:01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2/10.2 MB 24.5 MB/s eta 0:00:0000:01
Downloading imagesize-1.4.1-py2.py3-none-any.whl (8.8 kB)
Downloading roman_numerals_py-3.1.0-py3-none-any.whl (7.7 kB)
Downloading snowballstemmer-3.0.1-py3-none-any.whl (103 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/103.3 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 103.3/103.3 kB 7.6 MB/s eta 0:00:00
Downloading sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/119.3 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 119.3/119.3 kB 7.1 MB/s eta 0:00:00
Downloading sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/82.5 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.5/82.5 kB 6.2 MB/s eta 0:00:00
Downloading sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.7/98.7 kB 6.5 MB/s eta 0:00:00
Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB)
Downloading sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/88.7 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.7/88.7 kB 6.0 MB/s eta 0:00:00
Downloading sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/92.1 kB ? eta -:--:--
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 92.1/92.1 kB 4.3 MB/s eta 0:00:00
Installing collected packages: sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, snowballstemmer, roman-numerals-py, imagesize, docutils, babel, alabaster, sphinx, myst-parser, nbautoeval
Successfully installed alabaster-1.0.0 babel-2.17.0 docutils-0.21.2 imagesize-1.4.1 myst-parser-4.0.1 nbautoeval-1.8.0 roman-numerals-py-3.1.0 snowballstemmer-3.0.1 sphinx-8.2.3 sphinxcontrib-applehelp-2.0.0 sphinxcontrib-devhelp-2.0.0 sphinxcontrib-htmlhelp-2.1.0 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-2.0.0 sphinxcontrib-serializinghtml-2.0.0
import nbautoeval
c’est quoi un module ?¶
un module est un objet Python qui correspond à un fichier (ou répertoire) source
depuis cet objet vous pouvez accéder à des attributs
avec la notation module.attribut
(qui est btw la même notion que, par ex., str.capitalize
)
le module a autant d’attributs que d’objets globaux dans le code source
dans le cas d’un répertoire les attributs référencent d’autres modules
# regarder le contenu
!cat mod.py
GLOBALE = 100
def spam(data):
print(f"dans mod.spam, data={data}")
import mod
# tous les noms dans le module (y compris les noms "internes")
dir(mod)
['GLOBALE',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'spam']
# pour afficher tous les attributs du module
# et une fois le bruit éliminé
[x for x in dir(mod) if '__' not in x]
['GLOBALE', 'spam']
notion de point d’entrée¶
votre programme Python est toujours exécuté par un interpréteur
qui “commence” quelque part: c’est le point d’entrée
si vous lancez
$ python3 foo.py
le point d’entrée dans ce cas est
(le module correspondant à) foo.py
recherche des modules¶
Python recherche les modules dans plusieurs d’endroits (répertoires)
- le répertoire qui contient le point d’entrée
- en option, la variable d’environnement
PYTHONPATH
- là où sont installés les morceaux de la librairie standard
conseil : évitez de bidouiller PYTHONPATH
organisation de votre code¶
cela signifie que pour commencer,
on peut sans souci couper son code en fichiers
et les mettre tous dans le même répertoire
c’est une pratique courante et recommandée
il faut apprendre à découper
notamment pour augmenter la réutilisabilité
librairies utiles¶
liste largement non exhaustive
gestion des fichiers:
from pathlib import Path
génération de nombres aléatoires
import random
télécharger depuis Internet:
import requests
ouverture de fichiers au format JSON:
import json
(standard)Python scientifique:
numpy
,pandas
,matplotlib
, ...
module pathlib
¶
fait partie de la librairie standard
permet de faire des calculs sur les fichiers
- lister les fichiers présents
- calculs sur les chemins et noms de fichier
- accéder aux métadata (taille, date, ...)
# ici Path correspond à une classe
# on verra la théorie très bientôt
from pathlib import Path
# on recherche dans le répertoire courant '.'
# les fichiers/répertoires d'extension '.ipynb'
local_files = Path('.').glob('*.ipynb')
# observons les fichiers trouvés
for file in local_files:
print('name', file.name)
print('stem', file.stem)
print('suffix', file.suffix)
print('absolute()', file.absolute())
print('size', file.stat().st_size)
break
module random
¶
une fois que vous avez le nom du module,
il vous suffit de consulter la doc
complète
pour cela taper dans google python random module
(nous reviendrons sur ce module lors de l’étude des librairies numériques)
import random
# entre 0 et 1
random.random()
0.5975857059202976
# un entier entre deux bornes
# inclusivement
random.randint(0, 10)
1
module requests
¶
télécharger du contenu depuis une URL
accéder à l’entête http
plus flexible que l’équivalent dans la librairie standard urllib2
import requests
url = ""
url = "https://github.com/timeline.json"
request = requests.get(url)
print(f"code de retour HTTP: {request.status_code}")
code de retour HTTP: 410
raw_content = request.text
# une chaine de caractères
type(raw_content)
str
# le début de cette chaine
raw_content[:120]
# son contenu est en format json (voir slide suivante)
'{"message":"Hello there, wayfaring stranger. If you’re reading this then you probably didn’t see our blog post a couple '
module json
¶
le cas qu’on vient de voir est très fréquent
JSON est un format texte (compatible réseau donc Internet)
mais qui conserve un minimum de structure :
permet de transmettre listes et dictionnaires
# pour décoder le JSON qu'on a lu
# et qui est dans la str raw_content
import json
decoded = json.loads(raw_content)
type(decoded) # la chaîne contenait un dict Pyhon
dict
# cette fois on a un peu
# de structure
for k, v in decoded.items():
print(f"{k}\n\t{v[:20]}...")
message
Hello there, wayfari...
documentation_url
https://docs.github....
gestion de fichiers¶
# pour écrire dans un fichier
with open("tutu.txt", "w") as writer:
for i in range(4):
print(f"i={i}", file=writer)
with open...
ouvre le fichier tutu.txt
en écriture "w"
et crée la variable writer
de type File
writer
n’est visible que dans le with
print(..., file=writer)
écrit dans ce fichierwith
ferme le fichier à la sortie
(nous allons maintenant lire ce fichier)
fichiers - suite¶
# à l'envers, on relit le fichier
with open('tutu.txt') as reader:
for line in reader:
print(line, end="")
i=0
i=1
i=2
i=3
sans préciser le mode d’ouvertureopen
ouvre le fichier en lecture
l’objet reader
est itérable
la variable line
contient une fin de ligne
pas besoin que print
en rajoute une
exercice¶
écrire une fonction json_random()
qui retourne :
- une chaine de caractères
- qui correspond à l’encodage en JSON
- d’une liste contenant - au hasard - entre 2 et 5 valeurs numériques
- elles-mêmes tirées au hasard dans l’intervalle
# n'oubliez pas d'importer les modules
# dont vous avez besoin
def random_json():
"""
returns a JSON-encoded of a list
of 2 to 5 values between 2 and 5
"""
# votre code ici
pass
from check_random_json import check_random_json
check_random_json(random_json)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[23], line 1
----> 1 from check_random_json import check_random_json
3 check_random_json(random_json)
ModuleNotFoundError: No module named 'check_random_json'