diff --git a/cours/build.py b/cours/build.py
index 20fc3b7..1ab64d9 100755
--- a/cours/build.py
+++ b/cours/build.py
@@ -1,17 +1,28 @@
+import os
import sys
+import shutil
import subprocess
def main():
dev = "--dev" in sys.argv
+ werror = "--werror" in sys.argv
+ clean = "--clean" in sys.argv
if dev:
program = "sphinx-autobuild"
- opts = []
else:
program = "sphinx-build"
- opts = ["-W"]
+ opts = []
+ if clean:
+ if os.path.exists("build"):
+ shutil.rmtree("build")
+ if werror:
+ opts.append("-W")
cmd = [program, *opts, "-d", "build", "-b", "html", "source", "build/html"]
- subprocess.run(cmd, check=True)
+ print("$", *cmd)
+ process = subprocess.run(cmd)
+ if process.returncode != 0:
+ sys.exit(1)
if __name__ == "__main__":
diff --git a/cours/source/14-bibliothèques-01/03-bibliotheques-tierces.rst b/cours/source/14-bibliothèques-01/03-bibliotheques-tierces.rst
index a690d4e..495e01b 100644
--- a/cours/source/14-bibliothèques-01/03-bibliotheques-tierces.rst
+++ b/cours/source/14-bibliothèques-01/03-bibliotheques-tierces.rst
@@ -111,170 +111,3 @@ rajouter le chemin d'installation des scripts dans la variable d'environnement
PATH.
-Dépendances
------------
-
-Prenons une autre bibliothèque : ``cli-ui``.
-
-Elle permet d'afficher du texte en couleur dans un terminal::
-
- import cli_ui
-
- cli_ui.info("Ceci est en", cli_ui.red, "rouge")
-
-Elle permet également d'afficher des tableaux en couleur::
-
- headers=["name", "score"]
- data = [
- [(bold, "John"), (green, 10.0)],
- [(bold, "Jane"), (green, 5.0)],
- ]
- cli_ui.info_table(data, headers=headers)
-
-Pour ce faire, elle repose sur la bibliothèque ``tabulate`` vue
-précédemment. On dit que ``cli-ui`` *dépend* de ``tabulate``.
-
-Déclaration des dépendances
-----------------------------
-
-La déclaration de la dépendance de ``cli-ui`` vers ``tabulate`` s'effectue également dans le fichier ``setup.py``::
-
- setup(
- name="cli-ui",
- version="0.9.1",
- install_requires=[
- "tabulate",
- ...
- ],
- ...
- )
-
-pypi.org
----------
-
-On comprend dès lors qu'il doit nécessairement exister un *annuaire* permettant de relier les noms de dépendances à leur code source.
-
-Cet annuaire, c'est le site `pypi.org `_. Vous y trouverez
-les pages correspondant à `tabulate `_
-et `cli-ui `_.
-
-pip
----
-
-``pip`` est un outil qui vient par défaut avec Python3[^4]. Vous pouvez également l'installer grâce au script `get-pip.py `_, en lançant ``python3 get-pip.py --user``.
-
-Il est conseillé de *toujours* lancer ``pip`` avec ``python3 -m pip``. De cette
-façon, vous êtes certains d'utiliser le module ``pip`` correspondant à votre
-binaire ``python3``, et vous ne dépendez pas de ce qu'il y a dans votre ``PATH``.
-
-``pip`` est capable d'interroger le site ``pypi.org`` pour retrouver les
-dépendances, et également de lancer les différents scripts ``setup.py``.
-
-Comme de nombreux outils, il s'utilise à l'aide de *commandes*. Voici
-comment installer ``cli-ui`` à l'aide de la commande 'install' de ``pip``:
-
-.. code-block:: console
-
- $ python3 -m pip install cli-ui --user
- Collecting cli-ui
- ...
- Requirement already satisfied: unidecode in /usr/lib/python3.7/site-packages (from cli-ui) (1.0.23)
- Requirement already satisfied: colorama in /usr/lib/python3.7/site-packages (from cli-ui) (0.4.1)
- Requirement already satisfied: tabulate in /mnt/data/dmerej/src/python-tabulate (from cli-ui) (0.8.4)
- Installing collected packages: cli-ui
- Successfully installed cli-ui-0.9.1
-
-On constate ici quelques limitations de ``pip``:
-
-* Il faut penser à utiliser ``--user`` (de la même façon que lorsqu'on lance ``setup.py`` à la main)
-* Si le paquet est déjà installé dans le système, pip ne saura pas le
-mettre à jour - il faudra passer par le gestionnaire de paquet de
- la distribution
-
-En revanche, `pip` contient de nombreuses fonctionnalités intéressantes:
-
-* Il est capable de désinstaller des bibliothèques (à condition toutefois
- qu'elles ne soient pas dans un répertoire système)
-* Il est aussi capable d'afficher la liste complète des bibliothèques
- Python accessibles par l'utilisateur courant avec `freeze`.
-
-Voici un extrait de la commande ``python3 -m pip freeze`` au moment de la rédaction de cet article sur ma machine:
-
-.. code-block:: console
-
- $ python3 -m pip freeze
- apipkg==1.5
- cli-ui==0.9.1
- gaupol==1.5
- tabulate==0.8.4
-
-On y retrouve les bibliothèques ``cli-ui`` et ``tabulate``, bien sûr, mais
-aussi la bibliothèque ``gaupol``, qui correspond au [programme d'édition de
-sous-titres](https://otsaloma.io/gaupol/) que j'ai installé à l'aide du
-gestionnaire de paquets de ma distribution. Précisons que les modules de
-la bibliothèque standard et ceux utilisés directement par pip sont omis
-de la liste.
-
-On constate également que chaque bibliothèque possède un *numéro de version*.
-
-Numéros de version
--------------------
-
-Les numéros de version remplissent plusieurs rôles, mais l'un des principaux
-est de spécifier des changements incompatibles.
-
-Par exemple, pour ``cli-ui``, la façon d'appeler la fonction ``ask_choice``
-a changé entre les versions 0.7 et 0.8, comme le montre cet extrait du
-`changelog `_:
-
- *The list of choices used by ask_choice is now a named keyword argument:*
-
- .. code-block::
-
- # Old (<= 0.7)
- ask_choice("select a fruit", ["apple", "banana"])
- # New (>= 0.8)
- ask_choice("select a fruit", choices=["apple", "banana"])
-
-Ceci s'appelle un *changement d'API*.
-
-Réagir aux changements d'API
------------------------------
-
-Plusieurs possibilités:
-
-* On peut bien sûr adapter le code pour utiliser la nouvelle API, mais cela
- n'est pas toujours possible ni souhaitable.
-* Une autre solution est de spécifier des *contraintes* sur le numéro de
- version dans la déclaration des dépendances. Par exemple::
-
- setup(
- install_requires=[
- "cli-ui < 0.8",
- ...
- ]
- )
-
-Aparté : pourquoi éviter sudo pip
----------------------------------
-
-Souvenez-vous que les fichiers systèmes sont contrôlés par votre gestionnaire de paquets.
-
-Les mainteneurs de votre distribution font en sorte qu'ils fonctionnent bien les uns
-avec les autres. Par exemple, le paquet ``python3-cli-ui`` ne sera mis à jour
-que lorsque tous les paquets qui en dépendent seront prêts à utiliser la
-nouvelle API.
-
-En revanche, si vous lancez ``sudo pip`` (où ``pip`` avec un compte root),
-vous allez écrire dans ces mêmes répertoire et vous risquez de "casser"
-certains programmes de votre système.
-
-Mais il y a un autre problème encore pire.
-
-Conflit de dépendances
-----------------------
-
-Supposons deux projets A et B dans votre répertoire personnel. Ils dépendent
-tous les deux de ``cli-ui``, mais l'un des deux utilise ``cli-ui 0.7`` et l'autre
-``cli-ui 0.9``. Que faire ?
-
diff --git a/cours/source/14-bibliothèques-01/04-dépendances.rst b/cours/source/14-bibliothèques-01/04-dépendances.rst
index ad4c85b..9fb23f1 100644
--- a/cours/source/14-bibliothèques-01/04-dépendances.rst
+++ b/cours/source/14-bibliothèques-01/04-dépendances.rst
@@ -75,7 +75,7 @@ On constate ici quelques limitations de ``pip``:
* Il faut penser à utiliser ``--user`` (de la même façon que lorsqu'on lance ``setup.py`` à la main)
* Si le paquet est déjà installé dans le système, pip ne saura pas le
-mettre à jour - il faudra passer par le gestionnaire de paquet de
+ mettre à jour - il faudra passer par le gestionnaire de paquet de
la distribution
En revanche, `pip` contient de nombreuses fonctionnalités intéressantes:
diff --git a/cours/source/14-bibliothèques-01/05-virtualenv.rst b/cours/source/14-bibliothèques-01/05-virtualenv.rst
index 482b14c..dc74723 100644
--- a/cours/source/14-bibliothèques-01/05-virtualenv.rst
+++ b/cours/source/14-bibliothèques-01/05-virtualenv.rst
@@ -20,8 +20,8 @@ problème en :
* installant le paquet ``python3-venv``,
* ou en utilisant d'abord ``pip`` pour installer ``virtualenv``, avec
-``python3 -m pip install virtualenv --user`` puis en lançant ``python3 -m
-virtualenv foo-venv``.
+ ``python3 -m pip install virtualenv --user`` puis en lançant ``python3 -m
+ virtualenv foo-venv``.
Comportement de python dans le virtualenv
-----------------------------------------
@@ -58,7 +58,7 @@ habituel:
* Le répertoire "global" dans ``~/.local/lib`` a disparu
* Seuls quelques répertoires systèmes sont présents (ils correspondent
-plus ou moins à l'emplacement des modules de la bibliothèque standard)
+ plus ou moins à l'emplacement des modules de la bibliothèque standard)
* Un répertoire *au sein* du virtualenv a été rajouté
Ainsi, l'isolation du virtualenv est reflété dans la différence de la