---
title: Les paquets externes
author: Steve Kossouho
mainfont: Source Sans Pro
---

# Plus de paquets

----

L'écosystème de paquets tiers pour Python est regroupé essentiellement sur un dépôt officiel, nommé [PyPI](https://pypi.org) (Python Package Index).

Outre l'utilisation de `pip` pour y accéder, quelques questions sont occasionnellement posées quant à la perennité de ces paquets dans des environnements professionnels, notamment où la sécurité importe particulièrement.

----

## Critères d'un paquet de qualité

Plusieurs critères font d'une bibliothèque un atout de choix dans une pile technique (limitent le risque);

- Pris en charge par une société établie (l'argent appelle l'argent),
- Existe depuis longtemps (2 ans), et est mis à jour régulièrement avec une gestion active des tickets,
- Est correctement et régulièrement documenté,
- La communauté connaît et utilise suffisamment cette bibliothèque,

----

Ce n'est pas tout :

- Des sociétés privées proposent une prise en charge technique de la bibliothèque,
- Des sociétés établies s'en servent en production ! (bon, une des pires failles de l'histoire avec log4j en 2021 était potentiellement exploitable chez toutes les Fortune500)

----

## Rappel sur l'utilisation de `pip`

`pip` est un programme installé avec Python qui vous permet de télécharger et installer (dans votre virtualenv ou autre) des
paquets du dépôt PyPI. On peut l'utiliser de plein de façons différentes, mais l'essentiel, c'est d'ouvrir un terminal et de
taper (évidemment il faut remplacer les éléments nécessaires)

```shell
pip install <nom du paquet>
```

----

## Traitement du texte

- `unidecode` : retirer les accents et translittérer.
- `nltk` : usine à gaz pour le traitement du langage naturel (500+ Mo)
- `chardet` : bibliothèque capable de suggérer une page de code pour un fichier texte (devine s'il s'agit de UTF8, UTF16, 850, 1252, etc.)

----

## Dates et heures

- `pytz` : simplifier le cauchemar des fuseaux horaires dans la bibliothèque standard. (corrigé dans Python 3.9 avec `zoneinfo`)
- `pendulum` : traitement des dates, intervalles et dé/encodage de texte.
- `arrow` : traitement des dates etc.
- `ciso8601` : décodage rapide de chaînes de dates. Suivi en vitesse par `pendulum`.

----

## Web

- `flask` : microframework pour faire du web. Démarrage rapide, évolution plus compliquée.
- `django` : framework web efficace et complet avec son propre ORM.
- `fastapi` : framework pour écrire des API REST, récent.
- `jupyter` : console Python interactive avancée
- `jupyterlab` : console Python interactive avancée (encore plus avancée)

----

## Réseau

- `scapy` : manipulation de paquets réseau
- `paramiko` : implémentation du protocole SSHv2

----

## ORM

- `sqlalchemy` : l'ORM de prédilection utilisé avec Flask
- `peewee` : ORM inspiré de Django
- `ponyorm` : ORM bien pensé

----

## Automatisation

- `fabric` : exécution de scripts sur plusieurs machines distantes via SSH.
- `ansible` : très utilisé pour exécuter des trucs sur des machines via SSH.
- `celery` : une file de tâches en Python, utilisable comme un cron, avec monitoring.
- `selenium` : automatisation d'actions dans un navigateur web pour tests ou autres.
- `playwright` : automatisation de navigateur web, meilleure expérience que Selenium. Par Microsoft.
- `mouse` : émuler et/ou réagir à des actions souris.
- `keyboard` : émuler et/ou réagir à des actions clavier.
- `faker` : générer des données factices (noms, adresses, clés d'API, nationalité, lorem etc.)

----

## Fichiers structurés

- `pandas` : Analyse de données tabulaires : Excel, JSON, CSV... tri, calcul, et génération de graphiques.
- `dask` : Analyse de données parallélisable.
- `modin` : Pandas parallélisable avec plusieurs backends disponibles.
- `pyspark` : Analyse de données clusterisable (avec Spark).
- `optimus` : boîte à outils d'analyse de données, peut utiliser `pandas`.
- `spire.xls` : manipulation de fichiers Excel et export dans plusieurs formats dont PDF. [Lien](https://pypi.org/project/Spire.Xls/)
- `pdfkit` : générer du PDF depuis du HTML
- `weasyprint` : générer des documents PDFbdepuis du HTML. Full Python, plus stable.
- `reportlab` : usine à gaz pour créer du PDF.
- `pypdf2` : manipuler des PDF (rotation, découpage des pages etc.)

----

- `lxml` : manipuler des XML
- `beautifulsoup4` : manipuler du code HTML

----

## Manipuler des images

- `pillow` : bibliothèque classique pour créer et traiter des images.
- `pyside` : possède une classe QImage performante.
- `skia` : par Google, dessin vectoriel, depuis env. 2017.
- `cairo` : dessin vectoriel, depuis env. 2005.
- `wand` : utiliser les fonctionnalités de ImageMagick.
- `ffmpeg-python` : utiliser les fonctionnalités de FFMPeg

----

## HTTP

- `requests` : facilite le HTTP. Capable de désérialiser du JSON depuis une réponse HTTP.
- `python-dotenv` : permet de charger des informations depuis un fichier d'environnement (.env)
- `fastapi` : concevez rapidement une API REST en Python.

----

## IA et vision assistée par ordinateur

- `keras` : IA plus facile en Python. Dépend de TensorFlow.
- `tensorflow` : IA en Python.
- `pytorch` : IA en Python.
- `opencv` : incontournable pour le traitement d'images et la détection de caractéristiques.

----

## Calcul

- `numpy` : calcul rapide sur des données matricielles, tabulaires ou en n-dimensions.
- `scikit-learn` : apprentissage machine.

----

## Afficher des graphiques

- `matplotlib` : bibliothèque d'affichage de graphes
- `pygal` : bibliothèque d'affichage de graphes en SVG
- `seaborn` : plus élégant que Matplotlib pour afficher des graphiques
- `plotly` : affichage de graphiques via les technologies web
- `dash` : générer des tableaux de bord avec des graphiques (entre autres)

----

## Formatage du code Python et vérification stylistique

- `black` : formate votre code sans poser de question. Très utilisé professionnellement.
- `pylint` : indique tous les problèmes de normes et convention dans votre code.
- `flake8` : problèmes de normes et convention, plutôt orienté PEP8.
- `isort` : trie les imports automatiquement.
- `radon` : outil de génération de métriques sur le code.
- `mypy` : vérification des annotations de type.

----

## Boilerplate Python

- `attrs` : Bibliothèque de décorateurs pour `dataclasses`

----

## Spécialité Windows

- `winregistry` : accès simplifié à la base de registre Windows.

----

## Générer des exécutables

- `pyinstaller` : Convertisseur de scripts Python en exécutables autonomes.
- `py2exe` : Idem.

[Comparaison avec d'autres packagers](https://pyoxidizer.readthedocs.io/en/stable/pyoxidizer_comparisons.html)

----

## Awesome Python

[Curation des meilleurs paquets Python](https://github.com/vinta/awesome-python)


----

Ressources d'entraînement à Python

https://store.steampowered.com/app/1067220/RoboCo/
