% Programmation avec Python (chapitre 11) % Dimitri Merejkowsky
\center \huge Retour sur les exceptions
try:
file = open("file.txt")
1 / 0
except ZeroDivisionError:
print("got you")
finally:
print("closing")
file.close()
try:
file = open("file.txt")
1 / 0
except ZeroDivisionError:
print("got you")
file.close()
Que se passe-t-il si l’exception n’est pas ZeroDivisionError?
\center \huge Utiliser des bibliothèques tierces
import foo
foo.bar()
Fonctionne si:
foo.py
quelque part qui contient une fonction bar
PATH="/bin:/usr/bin:/usr/sbin"
$ ifconfig
# résout sur /usr/sbin/ifconfig
$ ls
# résout sur /bin/ls
Résoudre: trouver le premier élément dans la liste.
En Python c’est pareil.
import sys
print(sys.path)
* '' # vide = chemin courant
* /usr/lib/python3.7
* /usr/lib/python3.7/lib-dynload
* /home/dmerej/.local/lib/python3.7/site-packages
* /usr/lib/python3.7/site-packages
Seul deux des composants sont accessibles en écriture par mon utilisateur courant:
~/.local/lib/python3.7/site-packages/
)Même principe sur macOS et Windows (presque)
Par example, pour faire des jolis tableaux:
import tabulate
scores = [
["John", 345],
["Mary-Jane", 2],
["Bob", 543],
]
table = tabulate.tabulate(scores)
print(table)
--------- ---
John 345
Mary-Jane 2
Bob 543
--------- ---
On peut trouver le code source de tabulate
facilement.
Mais comment faire pour le mettre dans sys.path
?
Si vous êtes sous Linux, peut-être que vous pouvez utiliser votre gestionnaire de paquets.
Du genre: sudo apt install python3-tabulate
.
On peut récupérer les sources et les installer avec python3 setup.py install --user
Quasiment tous les projets python ont un setup.py
utilisable de cette façon.
On utilise --user
pour éviter des problèmes de permissions
Démo!
Un appel à setuptools.setup()
. C’est tout
from setuptools import setup
setup(
name='tabulate',
version='0.8.1',
description='Pretty-print tabular data',
py_modules=["tabulate"],
scripts=["bin/tabulate"],
...
)
Sur linux, si le paquet contient des scripts, ils arriveront dans ~/.local/bin
.
Sous macOS et Windows, ce sera un autre emplacement, mais qui dépendra de la version de Python.
Il faudra peut-être changer le PATH sur votre machine si vous voulez lancer les scripts
directement. Ou alors, utilisez python3 -m
(quand c’est possible).
Example:
python3 -m tabulate
Prenons une autre bibliothèque: cli-ui
.
Elle sert à faire des jolis programmes en couleur:
import cli_ui
cli_ui.info_1("Ceci est une info importante")
cli_ui.info("Ceci est en", cli_ui.bold, "gras")
En fait, cli-ui
utilise d’autres bibliothèques.
Par exemple:
headers=["name", "score"]
data = [
[(bold, "John"), (green, 10.0)],
[(bold, "Jane"), (green, 5.0)],
]
cli_ui.info_table(data, headers=headers)
Devinez qui s’occupe d’afficher le tableau!
Aussi dans setup.py:
setup(
name="cli-ui",
version="0.9.1",
install_requires=[
"tabulate",
...
],
...
)
pypi.org: un site que recense plein de bibliothèques python.
Vive l’open source!
cli-ui et tabulate y sont présents.
pip
vient par défaut avec Python3get-pip.py
(python3 get-pip.py --user)python3 -m pip
.Va chercher tout seul sur pypi
Lance setup.py
tout seul (pour trouver les dépendances, et les installer)
S’utilise avec python3 -m pip install --user ...
python3 -m pip uninstall <>
pypi
directement - python3 -m pip search <>
python3 -m pip freeze
--user
/usr/lib/
sous Linux),
pip ne saura pas le mettre à jour - il faudra passer par le gestionnaire de paquet de
la distributionParfois, les versions sont incompatibles entre elles!
https://tankerhq.github.io/python-cli-ui/changelog.html#v0-8-0
On peut donner des versions dans setup.py
:
install_requires=[
"cli-ui < 0.8",
...
]
Les fichiers dans /usr/lib
sont contrôllés par votre gestionnaire de paquet.
Les mainteneurs de votre distribution font en sorte qu’ils marchent bien les uns avec les autres.
Si vous lancer sudo pip
vous risquez de casser votre système.
cli-ui
0.7cli-ui
0.9Comment faire pour travailler sur les deux projets?
python3 -m venv <le chemin>
- sauf sous Debian ;-(virtualenv
avec pip puis utiliser virtualenv
$ python3 -m pip install virtualenv --user
$ python3 -m virtualenv <le chemin>
~/.local/lib
Et vous avez aussi un pip
spécial dans /le chemin/bin/pip
--user
Si taper le chemin du virtualenv vous embête, vous pouves
l’activer avec source <chemin>/bin/activate
Pour sortir: deactivate
.
C’est plus long, mais ça vous évitera un tas de problèmes ...
requirements.txt
pipenv
poetry
On y reviendra
\center \huge À vous de jouer!
Pas d’atelier collectif cette fois. Objectif:
https://nerdparadise.com/programming/pygame
Questions à dimitri@e2li.org