Du code, du communisme

(Très) Grand listing des libs tierce partie les plus utiles en Python

Je n’ai pas tout mis, et quand j’ai omis c’est soit par ignorance, soit par choix. Je suis partial et limité et puis bon, y a plus de 22000 packages sur Pypi… 🙂 Ça m’a quand même pris une bonne partie de mon dimanche de compiler tout ça. Enjoy. (voir aussi: une liste similaire pour la lib standard)

Sujet

Nom de la bibliothèque

Description

Administration système

Outils autour de la ligne de commande

Pexpect

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.

Clint

Quelques helpers pour afficher dans un terminal proprement (couleur, indentation, quoting) sans se compliquer la vie.

Sh

Appeler les programmes en lignes de commande comme si c’était des fonctions Python. Fonctionne automaGiquement.

Envoy

Une alternative élégante au module subprocessing qui permet d’appeler d’autres programmes depuis Python.

Pyped

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

Grin

Grep sous stéroïde. Utilisable en ligne de commande, ou programmatiquement.

Path.py

Améliore sensiblement l’API de manipulation des fichiers de Python en lui donnant un goût de POO et une certaine élégance.

Watchdog

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

Scapy

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.

DPKT

Création basique de paquets et gestion primitive de TCP/IP. Vise clairement le hacker qui veut rester proche de l’implémentation.

Paramiko

API de haut niveau pour travailler à travers le protocole SSH.

Interaction avec l’OS

Psutil

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.

Win32

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.

Env

Une API simple et élégante pour interagir avec les variables d’environnement.

Déploiement

Salt

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

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é.

Fabtools

Collection d’outils pour fabric pour étendre ses fonctionnalités et rajouter, par exemple, la gestion de dépendances des paquets. Encore jeune.

Services

Supervisor

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.

Circus

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

PyUSB

Manipuler des périphériques USB depuis Python sous Windows.

PySerial

Manipuler des ports séries depuis Python. Nécessite l’extension JavaComm et ctypes sous Windows.

PyParallel

Manipuler des ports parallèles depuis Python. Nécessite l’extension JavaComm.

Bases de données

SGBD

mysql-python

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.

Psycopg

Adaptateur pour se connecter à une base de données PostgreSQL. Demande une compilation si installé avec pip.

PyODBC

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

Codernitydb

Une sorte de SQLite en NoSQL, écrit en pur Python, et fourni avec son propre serveur HTTP optionnel.

PyMongo

Tout ce qu’il faut pour jouer avec MongoDB. Mais nécessite distribute…

Redis

Client pour Redis. Pur Python. Installer Hiredis pour le rendre plus rapide, mais cela demande compilation pour pip.

Couchdb

Client officiel pour CouchDB.

Woosh

Un moteur d’indexation et de recherche de texte écrit en pur Python. Une sorte de SQLite pour moteur de recherche.

ORM

Peewee

Un micro-ORM qui tient dans un fichier, il est néanmoins très capable. Parfait pour un petit script ou un projet desktop.

SQLAlchemy

Probablement l’ORM le plus complet au monde.

Sécurité

PyCryto

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

Kivy

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.

PyGTK

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.

PySide

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.

wxPython

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

Urwid

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

Dateutil

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

Babel

Traduction, localisation, dates naturelles…

Manipuler des devises

Python-money

Des primitives pour effectuer le délicat travail de manipulation des devises.

Multimédia

Manipuler des images

PIL

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

PyGame

Jeux vidéos en 2D, du moteur graphique à la logique du jeu en passant par la musique.

PyOpenGl

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

Jinja2

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.

xlwt

Produire des documents au format XLS.

Weasyprint

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

Nose

Lanceur de tests avec auto détection des tests et des adaptateurs d’entrées et sorties pour beaucoup d’autres outils.

Lettuce

La bibliothèque la plus connue pour faire du BDD (développement orienté comportement).

PyTest

Rend les tests plus simples à écrire et faciles à debugger. Très belle API, surtout comparée à xUnit.

Documentation

Sphinx

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

p2exe

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.

cx_Freeze

Similaire à p2exe, mais peut être lancé sous un autre OS que Windows.

Versiontools

Des helpers pour incrémenter la version de son programme proprement.

Développement

Xworkflows

Facilite la création de machines à états finis.

Gevent

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.

Pyjnius

Accéder à des classes Java sans sortir l’artillerie lourde (comme Jython).

Showme

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.

Ctypes

Appeler du C depuis Python. Si vous avez un .dll ou un .so qui vous tient à cœur, c’est par ici.

Batbelt

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

Clize

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

Reverend

Implémentation en Python de filtrage bayésien. Utile pour lutter contre le spam ou trouver des contenus qui se ressemblent dans leurs formes.

Pattern

Analyse linguistique en langage naturel, intelligence artificielle et même quelques Web spiders.

FuzzyFuzzy

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.

guess_language

Essaye de deviner la langue dans laquelle est écrit un texte.

Chardet

Essaye de deviner l’encodage dans lequel est écrit un texte. Utilisé par Mozilla.

PyParsing

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.

NLTK

« Natural Language Toolkit » Une référence dans le domaine de l’analyse du langage naturel.

Coloration syntaxique

Pygments

Rapide et puisant, mais ne détecte pas automatiquement le langage utilisé.

Parser du XML

LXML

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.

Feedparser

Extrait les données de flux RSS et Atom.

Untangle

Transforme un arbre XML en un objet Python. Lent mais une belle API très agréable et facile à manipuler.

Parser du HTML

Beautiful Soup

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é.

PyQuery

L’API de jQuery, portée en Python.

Parser un fichier binaire

Hachoir

Transforme un fichier binaire en un arbre de champs manipulables. La bibliothèque est par ailleurs très modulaire.

python-docx

Lire et écrire dans le fameux format « standard » de MS Office. Dépendances lourdes : LXML et PIL.

PyRTF

Lire et écrire en RTF, seul format 100 % compatible avec MS Office et LibreOffice.

Reportlab

Lire et écrire des PDF, au pixel prêt.

OdfPy

Manipuler les fichiers ODF en pur Python.

Pod

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.

xlrd

Lire les documents produits par Excel.

Science

Calculs

NumPy

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.

SciPy

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

Matplotlib

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.

Networkx

Création et manipulation de graphes nœud par nœud. Export en SVG.

Analyse de données et modélisation

Pandas

Traitement en masse de gros échantillons de données pour en extraire les parties significatives et les traiter.

PyTables

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).

Tablib

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.

SimPy

Bibliothèque de simulation en Python similaire à REPAST ou NetLogo en moins puissant.

RPy2

Utiliser R, depuis Python.

Web et Internet

Crawling

Scrappy

Un framework entier pour créer des bots qui vont parcourir et extraire des données de sites entiers. Vraiment très complet.

Framework

Bottle

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.

CherryPy

Framework POO assez complet mais sans ORM ni langage de template. Embarque un serveur HTTP en pur Python assez performant (et intégrable à Bottle).

Django

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.

Pyramid

Une fusion de la plupart des anciens concurrents de Django. Beaucoup plus découplé. À surveiller.

Tornado

Un framework asynchrone plus accessible que Twisted, mais un peu moins performant et surtout spécialisé dans le Web. Utilisé notamment par Facebook.

Twisted

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

Celery

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.

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.

PyZMQ

Support Python pour le protocole ZeroMQ. Nécessite une compilation de la part de pip.

SnakeMQ

Implémentation prometteuse en pur Python d’un protocole de messagerie similaire à ZeroMQ. Jeune, immature, incompatible avec ZeroMQ.

Proxys et serveurs

Deliverance

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).

Gunicorn

Un serveur compatible WSGI assez rapide. Très utilisé en couple avec Nginx et Django. Nécessite une compilation pour pip.

HTTP

Ghost.py

Simuler un navigateur Web incluant un moteur de rendu complet (Webkit) et donc JavaScript. Nécessite PySide et donc un gros boulot d’installation.

Mechanize

Simule un navigateur Web (sans le JavaScript).

Youtube-dl

Téléchargement des vidéos et metadata sur des dizaines de sites de streaming, de manière uniforme.

Requests

Une surcouche à urllib2 qui rend l’utilisation de requête HTTP belle et agréable.

Grequest

Un wrapper de requests utilisant Gevent pour rendre la bibliothèque asynchrone.

Webservices

Python-oauth2

Actuellement le meilleur client pour gérer OAuth en Python.

Suds

La seule bibliothèque efficace et stable pour créer un client SOAP.

Spyne

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.

Facepy

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.

Twitter

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.