(Très) Grand listing des libs tierce partie les plus utiles en Python
lundi 26 novembre 2012 à 07:13Je n’ai pas tout mis, et quand j’ai omis c’est soit par ignorance, soit par choix. Je suis partial et limité :-) Ça m’a quand même pris une bonne partie de mon dimanche de compiler tout ça. Enjoy.
Sujet |
Nom de la bibliothèque |
Description |
Administration système |
||
Outils autour de la ligne de commande |
Capture de sortie avancée, mais surtout des facilités pour discuter avec le programme comme si on était un humain devant sa console en train de taper. |
|
Quelques helpers pour afficher dans un terminal proprement (couleur, indentation, quoting) sans se compliquer la vie. |
||
Appeler les programmes en lignes de commande comme si c’était des fonctions Python. Fonctionne automaGiquement. |
||
Une alternative élégante au module subprocessing qui permet d’appeler d’autres programmes depuis Python. |
||
Un petit outil pour pouvoir piper des sorties de commande et les traiter avec des one-liners en Python, comme on fait avec Perl. |
||
Manipuler des fichiers |
Grep sous stéroïde. Utilisable en ligne de commande, ou programmatiquement. |
|
Améliore sensiblement l’API de manipulation des fichiers de Python en lui donnant un goût de POO et une certaine élégance. |
||
API multiplateforme pour surveiller les changements dans le système de fichiers (création de dossier, édition, etc) et y réagir. |
||
Manipuler le réseau |
Un couteau suisse pour le réseau qui clame pouvoir remplacer programmatiquement hping, 85% de nmap, arpspoof, arp-sk, arping, tcpdump, tethereal et p0f. Non testé par l’auteur, mais il a une bonne réputation. |
|
Création basique de paquets et gestion primitive de TCP/IP. Vise clairement le hacker qui veut rester proche de l’implémentation. |
||
API de haut niveau pour travailler à travers le protocole SSH. |
||
Interaction avec l’OS |
Outil multiplateforme qui permet d’obtenir les informations que fournissent ps, top, df, kill, free, lsof, netstat, ifconfig, nice, ionice, iostat, iotop, uptime, pidof, tty, who, taskset et pmap. |
|
Travailler directement avec l’API COM de Windows. Utile pour contrôler des programmes avec des macros en VB, donner des ordres à MS Office et avoir accès à certains appels que seul le Dieu des DLL connaît. Installable via un .exe. |
||
Une API simple et élégante pour interagir avec les variables d’environnement. |
||
Déploiement |
Salt peut gérer entièrement et rapidement votre infrastructure même si elle compte des milliers de serveurs, à travers des fichiers de conf. Lancement de services, installation de paquets, gestion des dépendances… |
|
Fabric a les mêmes objectifs que salt mais l’approche est différente : d’accès plus facile, il vise les déploiements de moyenne taille et utilise des fichiers de code en Python, et non de configuration. Exécuter une installation à distance via SSH automatiquement est sa spécialité. |
||
Collection d’outils pour fabric pour étendre ses fonctionnalités et rajouter, par exemple, la gestion de dépendances des paquets. Encore jeune. |
||
Services |
Démarre, arrête et relance gracieusement des services. N’importe quel programme peut être défini comme un service dans un fichier de configuration adapté, et sera daemonisé, monitoré et relancé si besoin en cas de crash. Très utilisé pour gérer les daemons de celery, gunicorn, etc. Un très bon remplacement à tous ces scripts dans /etc/init.d. |
|
Vise le même but que supervisor, mais gère en plus les sockets. Il peut être réparti sur plusieurs nœuds qui communiquent avec ZeroMQ (qui est donc une dépendance). Le projet est soutenu par Mozilla. Si vous cherchez la simplicité, restez sur supervisor, si vous cherchez la puissance, circus est fait pour vous. |
||
Matériel |
Manipuler des périphériques USB depuis Python sous Windows. |
|
Manipuler des ports séries depuis Python. Nécessite l’extension JavaComm et ctypes sous Windows. |
||
Manipuler des ports parallèles depuis Python. Nécessite l’extension JavaComm. |
||
Bases de données |
||
SGBD |
Malgré le nom inversé, c’est bien ce paquet qu’il faudra installer pour obtenir les drivers MySQL. Nécessite distribute (pip install distribute) et une compilation pour pip avec dépendances. |
|
Adaptateur pour se connecter à une base de données PostgreSQL. Demande une compilation si installé avec pip. |
||
Permet de se connecter aux base de données qui possèdent une interface ODBC, telles que MS Access. Requiert une compilation pour pip. |
||
NoSQL |
Une sorte de SQLite en NoSQL, écrit en pur Python, et fourni avec son propre serveur HTTP optionnel. |
|
Tout ce qu’il faut pour jouer avec MongoDB. Mais nécessite distribute… |
||
Client pour Redis. Pur Python. Installer Hiredis pour le rendre plus rapide, mais cela demande compilation pour pip. |
||
Client officiel pour CouchDB. |
||
Un moteur d’indexation et de recherche de texte écrit en pur Python. Une sorte de SQLite pour moteur de recherche. |
||
ORM |
Un micro-ORM qui tient dans un fichier, il est néanmoins très capable. Parfait pour un petit script ou un projet desktop. |
|
Probablement l’ORM le plus complet au monde. |
||
Sécurité |
La référence du chiffrement en Python pour tous vos besoins autour de AES, Blowfish, SHA, etc. Nécessite une compilation par pip. |
|
Desktop |
||
Ces bibliothèques sont difficiles à installer dans un environnement virtuel. Exceptionnellement, installez-les au niveau de l’OS en utilisant un installer fourni sur le site officiel ou dans les dépôts de votre système, et non avec pip. |
||
Développer une interface graphique |
Pour le moment très jeune. Permet de développer des UI sur les principaux systèmes d’exploitations et sur Android ainsi que iOS. Gère le multi-touche. |
|
Binding Python des bibliothèques GTK, assez simple à utiliser et très bien intégré au bureau GNOME bien qu’il existe des moyens de porter une application sur d’autres OS. La documentation est globalement moins bonne que celle de PySide/PyQT. |
||
Portable et très complet, PySide est aussi complètement compatible avec PyQt mais offre une licence plus permissive (LGPL). Le projet est soutenu par Nokia. |
||
Très portable, et moins dur à packager que les autres, mais avec une API très proche du C et un manque de widgets modernes. |
||
Développer une interface console |
Création d’interfaces textuelles avancées dans la lignée de curses, mais avec des widgets supplémentaires, une bonne gestion des couleurs et de l’UTF-8 et une courbe d’apprentissage assez raide. |
|
Localisation |
||
Calcul avancé avec des dates et des périodes |
Un complément puissant compatible avec datetime et qui propose en plus un parseur avancé, une gestion des récurrences et des durées relatives. |
|
I18n |
Traduction, localisation, dates naturelles… |
|
Manipuler des devises |
Des primitives pour effectuer le délicat travail de manipulation des devises. |
|
Multimédia |
||
Manipuler des images |
Le standard de la manipulation d’images en Python. Toutes les opérations de base y sont, mais elle est assez difficile à installer. |
|
Création de jeu vidéo et d’animations |
Jeux vidéos en 2D, du moteur graphique à la logique du jeu en passant par la musique. |
|
Un binding OpenGL en Python qui donne accès à OpenGL (v1.1 à 4.3), GLU, GLUT v3.7, FreeGLUT, GLE 3 et des centaines d’extensions OpenGL. En prime, PyOpenGl est interopérable avec wxPython, PyGame, PyQt / PySide et PyGTK. |
||
Générer des documents |
Un langage de template proche de celui de Django qui limite le code Python utilisable et est facile d’accès. | |
Mako |
Un langage de template au rendu très rapide qui autorise n’importe quelle expression Python dans le document. | |
Produire des documents au format XLS. |
||
Une solution plus simple pour générer du PDF que Reportlab : générer du HTML et le convertir en PDF. Excellent si vous n’avez pas de besoin en lecture et si vous pouvez assumer la dépendance à PyGTK. |
||
Outils |
||
Tests unitaires |
Lanceur de tests avec auto détection des tests et des adaptateurs d’entrées et sorties pour beaucoup d’autres outils. |
|
La bibliothèque la plus connue pour faire du BDD (développement orienté comportement). |
||
Rend les tests plus simples à écrire et faciles à debugger. Très belle API, surtout comparée à xUnit. |
||
Documentation |
Permet d’écrire sa documentation au format RST et génère du HTML statique avec un moteur de recherche hors ligne très propre. Standard dans le monde de Python. |
|
Packaging |
Transforme un programme Python en exécutable Windows. Il n’y a pas de magie cependant, et cela demande un certain travail. Par ailleurs, cela ne crée pas un installateur pour autant. |
|
Similaire à p2exe, mais peut être lancé sous un autre OS que Windows. |
||
Des helpers pour incrémenter la version de son programme proprement. |
||
Développement |
Facilite la création de machines à états finis. |
|
Monkey patch les fonctions de réseau de la bibliothèque standard pour les rendre asynchrones et ainsi gagner en performance sur la lecture et l’écriture. |
||
Accéder à des classes Java sans sortir l’artillerie lourde (comme Jython). |
||
Une collection de décorateurs pour facilement et rapidement regarder le temps, le nombre de cycles CPU et l’entrée/sortie d’une fonction. |
||
Appeler du C depuis Python. Si vous avez un .dll ou un .so qui vous tient à cœur, c’est par ici. |
||
Une bibliothèque fourre-tout qui contient des fonctions-outils fort sympathiques pour la vie de tous les jours en Python : slugification, parcours d’itérables avec fenêtre, capture de stdout dans une variable, imports dynamiques simplifiés, sets ordonnés, etc. Absence totale de documentation, mais très bien commentée. |
||
Parsing |
||
Parser les arguments de la ligne de commande |
Permet de transformer l’appel d’une fonction automatiquement en une liste d’argument pour le script en cours. Très simple et tient dans un fichier mais utilise en interne un parsing manuel. |
|
Catégoriser du contenu |
Implémentation en Python de filtrage bayésien. Utile pour lutter contre le spam ou trouver des contenus qui se ressemblent dans leurs formes. |
|
Analyse linguistique en langage naturel, intelligence artificielle et même quelques Web spiders. |
||
La documentation dit « Fuzzy string matching like a boss ». C’est bien résumé. API très simple pour des comparaisons floues sur les chaînes de caractères. |
||
Essaye de deviner la langue dans laquelle est écrit un texte. |
||
Essaye de deviner l’encodage dans lequel est écrit un texte. Utilisé par Mozilla. |
||
Créer des parseurs pour des langages dont la grammaire est régulière en utilisant Python plutôt que des choses compliquées comme Lex. |
||
« Natural Language Toolkit » Une référence dans le domaine de l’analyse du langage naturel. |
||
Coloration syntaxique |
Rapide et puisant, mais ne détecte pas automatiquement le langage utilisé. |
|
Parser du XML |
Facile, puissant, rapide, mais pip devra compiler cette bibliothèque. Dans ses dernières versions, gère aussi le HTML, mais n’a pas la même tolérance que BeautifulSoup. |
|
Extrait les données de flux RSS et Atom. |
||
Transforme un arbre XML en un objet Python. Lent mais une belle API très agréable et facile à manipuler. |
||
Parser du HTML |
Pas très rapide mais très puissant, mais capable d’analyser du HTML très mal formé, et est écrit en pur Python. N’utilisez pas la version 3. En concurrence avec HTML5Lib que je n’ai pas testé. |
|
L’API de jQuery, portée en Python. |
||
Parser un fichier binaire |
Transforme un fichier binaire en un arbre de champs manipulables. La bibliothèque est par ailleurs très modulaire. |
|
Lire et écrire dans le fameux format « standard » de MS Office. Dépendances lourdes : LXML et PIL. |
||
Lire et écrire en RTF, seul format 100 % compatible avec MS Office et LibreOffice. |
||
Lire et écrire des PDF, au pixel prêt. |
||
Manipuler les fichiers ODF en pur Python. |
||
Une solution hybride qui part d’un template au format ODF (et pouvant contenir du code Python) qui ensuite génère du PDF, DOC, RTF ou TXT derrière. Requiert LibreOffice en mode serveur. |
||
Lire les documents produits par Excel. |
||
Science |
||
Calculs |
Bibliothèque de calculs scientifiques haute performance avec gestion des grands jeux de nombres, matrices avec n dimensions et même de quoi réutiliser son vieux code C/C++ ou Fortran. Requiert une compilation pour pip. |
|
Utilise la puissance de NumPy pour fournir des opérations avancées rapides sur les grands jeux de nombres et les matrices. |
||
Création de graphiques |
Produit des graphiques en 2D de bonne qualité, du plus simple au plus complexe. Très bien intégré au shell iPython avec lequel il permet de recréer un environnement similaire à MatLab. |
|
Création et manipulation de graphes nœud par nœud. Export en SVG. |
||
Analyse de données et modélisation |
Traitement en masse de gros échantillons de données pour en extraire les parties significatives et les traiter. |
|
Manipulation de gros jeux de données hiérarchiques avec optimisation automatique des ressources disque et mémoire utilisées (notamment en utilisant la compression à la volée). |
||
API élégante pour importer, manipuler et exporter des jeux de données tabulaires. Supporte la ségrégation, les colonnes dynamiques, les tags et le filtrage ainsi que l’export JSON, YML, CSV et XLS. |
||
Bibliothèque de simulation en Python similaire à REPAST ou NetLogo en moins puissant. |
||
Utiliser R, depuis Python. |
||
Web et Internet |
||
Crawling |
Un framework entier pour créer des bots qui vont parcourir et extraire des données de sites entiers. Vraiment très complet. |
|
Framework |
Un micro-framework qui tient dans un fichier. Excellent pour débuter la programmation Web avec Python ou pour un petit projet vite fait. Pas d’ORM, mais un langage de template. |
|
Framework POO assez complet mais sans ORM ni langage de template. Embarque un serveur HTTP en pur Python assez performant (et intégrable à Bottle). |
||
Le plus utilisé dans la communauté Python. Très intégré, extrêmement complet (ORM, template, formulaire, admin, middlewares, etc), grande quantité de ressources et de bibliothèques autour du projet. Malgré cela, assez facile à prendre en main. |
||
Une fusion de la plupart des anciens concurrents de Django. Beaucoup plus découplé. À surveiller. |
||
Un framework asynchrone plus accessible que Twisted, mais un peu moins performant et surtout spécialisé dans le Web. Utilisé notamment par Facebook. |
||
Spécialisé dans la programmation asynchrone. Peut faire bien plus que du Web, en fait tout ce qui est réseau, et en haute performance. Le prix a payer est sa complexité. Nécessite d’être compilé par pip. |
||
Messaging |
Surcouche à Kombu pour implémenter des files de tâches et des tâches récurrentes. On l’utilise généralement en lieu et place de Kombu. |
|
Le statu quo dans la gestion de messages et de queues, proposant une interface unifiée quel que soit le broker. Supporte RabbitMQ, Redis, Beanstalk, Amazon SQS, CouchDB, MongoDB et ZooKeeper. |
||
Support Python pour le protocole ZeroMQ. Nécessite une compilation de la part de pip. |
||
Implémentation prometteuse en pur Python d’un protocole de messagerie similaire à ZeroMQ. Jeune, immature, incompatible avec ZeroMQ. |
||
Proxys et serveurs |
Prend le design de n’importe quel site en ligne et l’adapte sur un autre site que vous possédez. Pratique pour changer l’aspect d’un site dont le thème est très difficile à modifier (exemple : un site Zope ou Plone). |
|
Un serveur compatible WSGI assez rapide. Très utilisé en couple avec Nginx et Django. Nécessite une compilation pour pip. |
||
HTTP |
Simuler un navigateur Web incluant un moteur de rendu complet (Webkit) et donc JavaScript. Nécessite PySide et donc un gros boulot d’installation. |
|
Simule un navigateur Web (sans le JavaScript). |
||
Téléchargement des vidéos et metadata sur des dizaines de sites de streaming, de manière uniforme. |
||
Une surcouche à urllib2 qui rend l’utilisation de requête HTTP belle et agréable. |
||
Un wrapper de requests utilisant Gevent pour rendre la bibliothèque asynchrone. |
||
Webservices |
Actuellement le meilleur client pour gérer OAuth en Python. |
|
La seule bibliothèque efficace et stable pour créer un client SOAP. |
||
SOAPLib marche très bien pour créer des serveurs SOAP, mais elle est dépréciée. Elle est néanmoins intégrée dans Spyne, qui se veut une solution généraliste pour créer des Webservices. |
||
Un client pour interagir avec la Graph API de Facebook. Seule alternative à jour depuis l’abandon de FB de sa propre lib et l’absence de mise à jour de facebook-sdk. |
||
Un client basique pour interagir avec Twitter. |
Vous pouvez rajouter en com’ toute lib qui vous semble utile. Si je l’aime, je l’insérerais dans le poste. Par avance, je vous indique que j’ai volontairement mis de côté: paste, zope, plone et buildout car à mes yeux leurs valeurs ajoutées ne compensent pas la complexité qu’elles apportent.