Librairies

Package et Module

Le sujet de la création de package et module est le sujet d’un tuto ici

Package

À chaque niveau d’arborescence, il faut mettre un fichier __init__.py. Il doit contenir au moins 1 caractère pour d’obscures raisons de suppression de fichiers vides par windows lors des zip/unzip.

Si on souhaite créer un package vide, qui n’a vocation qu’à contenir d’autres packages, il faut créer un fichier __init__.py contenant:

__import__("pkg_resources").declare_namespace(__name__)

Pour les packages contenant des modules, on peut faire ça:

# __init__.py
from .foo import *
from .bar import *
__all__ = (foo.__all__ + bar.__all__)

Dans les cas de gros packages, ils peuvent néanmoins avoir un effet important sur les performances.

Les Namespace packages sont une idée sympa pour permettre à d’autres développeurs de faire des extensions de sa librairie (CF tuto p. 105).

Module

Un module est un fichier .py.

Librairies sympas

Nom

Description

__future__

Permet d’avoir, en python2, des comportements apparus en python3 (unicode partout, print, etc.)

Asyncio

Multi-threading (python3.4, mais existe en non-garanti sous python2, sous le nom de trollus).

BeautifulSoup

html et xml, même très mal formatté

csv

Parsing de fichiers CSV

mmap

Gestion de memory mapped file, permet de charger des fichier de grande taille sans les charger en RAM en entier

docopt

Alternative à argparse, fait tout à partir d’une chaine d’usage

begins

Autre alternative, permettant de simplement décorer une fonction pour en faire la fonction principale du script et automatiquement créer les arguments de la commande à partir des arguments de la fonction.

Fabric

Ssh, pour faire du déploiement par exemple, basé sur paramiko

Hachoir

Lecture de fichiers, métadonnées, réparations de binaires dégradés

logging

Module de gestion des niveaux de log

lxml

Parsing html et xml

multiprocessing

Faire des forks comme un fou

Utilisent la même API, ils sont donc facilement interchangeable

threading

À préférer à thread, mais peut être limité par le GIL. Reste quand même super s’il y a beaucoup d’IO (fichiers, RAM, etc.).

Paramiko

ssh

peewee

client ORM très léger pour sqlite, MySQL & PostgreSQL

pickle

Sérialisation d’objets

PIL

Python Imaging Library (pip install pillow ou pilotk)

queue

Gestion de queues (FIFO, LIFO, etc…). voir Queue en python 2.

requests

Alternative plus haut niveau à urllib

Scapy

Manipulation de paquets réseaux

SQLAlchemy

Connection à une BdD SQL

zodb

Bdd historisée et transactionnelle (très rapide en lecture, mais moins en écriture).

Sinon il y a la super liste de Sam&Max. Ils essayent de la mettre à jour régulièrement.