| @@ -7,25 +7,25 @@ | |||||
| ```python | ```python | ||||
| try: | try: | ||||
| fp = open("file.txt") | |||||
| file = open("file.txt") | |||||
| 1 / 0 | 1 / 0 | ||||
| except ZeroDivisionError: | except ZeroDivisionError: | ||||
| print("got you") | print("got you") | ||||
| finally: | finally: | ||||
| print("closing") | print("closing") | ||||
| fp.close() | |||||
| file.close() | |||||
| ``` | ``` | ||||
| # versus | # versus | ||||
| ```python | ```python | ||||
| try: | try: | ||||
| fp = open("file.txt") | |||||
| file = open("file.txt") | |||||
| 1 / 0 | 1 / 0 | ||||
| except ZeroDivisionError: | except ZeroDivisionError: | ||||
| print("got you") | print("got you") | ||||
| fp.close() | |||||
| file.close() | |||||
| ``` | ``` | ||||
| # Réponse: | # Réponse: | ||||
| @@ -41,18 +41,18 @@ Que se passe-t-il si l'exception *n'est pas* ZeroDivisionError? | |||||
| ```python | ```python | ||||
| import foo | import foo | ||||
| answer = foo.get_answer() | |||||
| foo.bar() | |||||
| ``` | ``` | ||||
| Fonctionne si: | Fonctionne si: | ||||
| * Il y a un `foo.py` quelque part qui contient une fonction `get_answer` | |||||
| * Il y a un `foo.py` quelque part qui contient une fonction `bar` | |||||
| * Dans le dossier courant | * Dans le dossier courant | ||||
| * Ou dans la bibliothèque standard Python | * Ou dans la bibliothèque standard Python | ||||
| # Parlons de PATH | # Parlons de PATH | ||||
| * Vous connaissez peut-être la variable PATH, qui dit | |||||
| * Vous connaissez peut-être la variable d'environement PATH, qui dit | |||||
| où sont les exécutables. | où sont les exécutables. | ||||
| ```bash | ```bash | ||||
| @@ -60,9 +60,11 @@ PATH="/bin:/usr/bin:/usr/sbin" | |||||
| $ ifconfig | $ ifconfig | ||||
| # résout sur /usr/sbin/ifconfig | # résout sur /usr/sbin/ifconfig | ||||
| $ ls | $ ls | ||||
| # résount sur /bin/ls | |||||
| # résout sur /bin/ls | |||||
| ``` | ``` | ||||
| Résoudre: trouver le premier élément dans la liste. | |||||
| # sys.path | # sys.path | ||||
| En Python c'est pareil. | En Python c'est pareil. | ||||
| @@ -82,7 +84,7 @@ print(sys.path) | |||||
| * /usr/lib/python3.7/site-packages | * /usr/lib/python3.7/site-packages | ||||
| ``` | ``` | ||||
| * Le chemin courant à la priorité sur la bibliothèque standard! | |||||
| * Le chemin courant a la priorité sur la bibliothèque standard! | |||||
| # À noter | # À noter | ||||
| @@ -124,6 +126,12 @@ On peut trouver le code source de `tabulate` facilement. | |||||
| Mais comment faire pour le mettre dans `sys.path`? | Mais comment faire pour le mettre dans `sys.path`? | ||||
| # Dans la distribution | |||||
| Si vous êtes sous Linux, peut-être que vous pouvez utiliser votre | |||||
| gestionnaire de paquets. | |||||
| Du genre: `sudo apt install python3-tabulate`. | |||||
| # À la main | # À la main | ||||
| @@ -157,14 +165,14 @@ Sur linux, si le paquet contient des *scripts*, ils arriveront dans `~/.local/bi | |||||
| Sous macOS et Windows, ce sera un autre emplacement, mais qui *dépendra de la version de Python*. | Sous macOS et Windows, ce sera un autre emplacement, mais qui *dépendra de la version de Python*. | ||||
| * Utilisez `python3 -m` quand c'est possible! | |||||
| 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: | |||||
| # Avec pip | |||||
| * `pip` vient par défaut avec Python3 | |||||
| * Vous pouvez aussi l'installer avec `get-pip.py` | |||||
| * Toujours le lancer avec `python3 -m pip`. | |||||
| ``` | |||||
| python3 -m tabulate | |||||
| ``` | |||||
| # Dépendances | # Dépendances | ||||
| @@ -212,6 +220,20 @@ setup( | |||||
| ) | ) | ||||
| ``` | ``` | ||||
| # pypi | |||||
| pypi.org: un site que recense plein de bibliothèques python. | |||||
| Vive l'open source! | |||||
| cli-ui et tabulate y sont présents. | |||||
| # pip | |||||
| * `pip` vient par défaut avec Python3 | |||||
| * Vous pouvez aussi l'installer avec `get-pip.py` (python3 get-pip.py --user) | |||||
| * Toujours le lancer avec `python3 -m pip`. | |||||
| # Intérêt de pip | # Intérêt de pip | ||||
| * Va chercher tout seul sur `pypi` | * Va chercher tout seul sur `pypi` | ||||
| @@ -220,11 +242,12 @@ setup( | |||||
| * S'utilise avec `python3 -m pip install --user ...` | * S'utilise avec `python3 -m pip install --user ...` | ||||
| # Fonctionnalités en plus | # Fonctionnalités en plus | ||||
| * Peut supprimer quelque chose installé - `python3 -m pip uninstall <>` | * Peut supprimer quelque chose installé - `python3 -m pip uninstall <>` | ||||
| * Peut chercher sur `pypi` directement - `python3 -m pip search <>` | * Peut chercher sur `pypi` directement - `python3 -m pip search <>` | ||||
| * Peut lister ce qui est installé - `python3 -m pip list` | |||||
| * Peut lister ce qui est installé - `python3 -m pip freeze` | |||||
| # Limitations de pip seul | # Limitations de pip seul | ||||
| @@ -232,6 +255,8 @@ setup( | |||||
| * Si le paquet est déjà installé dans le système (genre `/usr/lib/` sous Linux), | * Si le paquet est déjà installé dans le système (genre `/usr/lib/` sous Linux), | ||||
| pip ne saura pas le mettre à jour - il faudra passer par le gestionnaire de paquet de | pip ne saura pas le mettre à jour - il faudra passer par le gestionnaire de paquet de | ||||
| la distribution | la distribution | ||||
| # Versions de dépendances | # Versions de dépendances | ||||
| @@ -245,11 +270,21 @@ On peut donner des versions dans `setup.py`: | |||||
| ```python | ```python | ||||
| install_requires=[ | install_requires=[ | ||||
| "cli-ui <= 0.8", | |||||
| "cli-ui < 0.8", | |||||
| ... | ... | ||||
| ] | ] | ||||
| ``` | ``` | ||||
| # Apparté - pourquoi sudo pip c'est pas une bonne idée | |||||
| 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. | |||||
| # Plusieurs projets | # Plusieurs projets | ||||
| * Projet A utilise `cli-ui` 0.7 | * Projet A utilise `cli-ui` 0.7 | ||||
| @@ -259,7 +294,7 @@ Comment faire pour travailler sur les deux projets? | |||||
| # Environements virtuels | # Environements virtuels | ||||
| * Un chemin *isolé* du reste du système. | |||||
| * Un répertoire *isolé* du reste du système. | |||||
| * Contient un binaire python légèrement différent du binaire ordinaire. | * Contient un binaire python légèrement différent du binaire ordinaire. | ||||
| * Se crée avec `python3 -m venv <le chemin>` - sauf sous Debian ;-( | * Se crée avec `python3 -m venv <le chemin>` - sauf sous Debian ;-( | ||||
| @@ -302,13 +337,11 @@ C'est plus long, mais ça vous évitera un tas de problèmes ... | |||||
| # Pour aller plus loin | # Pour aller plus loin | ||||
| * PYTHONPATH | |||||
| * `requirements.txt` | * `requirements.txt` | ||||
| * `pipenv` | * `pipenv` | ||||
| * `poetry` | * `poetry` | ||||
| Veillez à bien comprendre le problème que ces outils résolvent avant de vous | |||||
| en servir! | |||||
| On y reviendra | On y reviendra | ||||
| # | # | ||||