209 lines
6.9 KiB
Markdown
209 lines
6.9 KiB
Markdown
---
|
||
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/
|