Files
org-roamings/20211230101535-python.org

12 KiB

Python

Language

Classe

Méthodes dunder (Double UNDERscore method)

Les méthodes repr et str

La méthode __repr__ est utilisée pour le debug quand __str__ pour l'utilisateur (good looking strings).

Fonctions Built-in

Functools module

Frameworks

Web

UI

GUI

Pyforms

Framework permettant d'exécuter une IHM dans 3 environnements différents : Desktop GUI, terminal et web.

Pyside

Bindings python pour Qt.

CLI

Text UI

Outils

Analyseur statique de code

Automatisation de tests

Nox

Outil en ligne de commande permettant d'automatiser les tests dans multiples environnements Python. Comme Tox, à la différence, que la configuration est effectuée depuis un fichier Python (et non pas de configuration).

Tox

Outil en ligne de commande permettant d'automatiser les tests dans multiples environnements Python.

Couverture de code

Slipcover

Outil de mesure de couverture de code plus rapide que coverage.py.

Formatter

autopep8

Utilitaire formattant le code afin de respecter la PEP8 guideline. Il est basé sur l'analyse de code effectuée par pycodestyle. Autopep8 ne modifie que les espaces contenus dans le code (l'option --aggressive permet d'accroitre le pouvoir d'autopep8 et le laisser modifier le code).

isort

Outil classant les imports par ordre alphabétique, les séparant par section et par type.

Black

Formatter n'appliquant que le style black. Il accepte la même synthaxe de contrôle que YAPF.

YAPF

En plus de vérifier la conformité avec la PEP8, YAPF formatte le code afin de respecter un style (approche basée sur clang-format et similaire à gofmt).

Générateur de données

Memesis

Génération de données pouvant être utilisées pour:

  • Remplir une base de données de test,
  • Créer une faux API endpoint,
  • Créer des fichiers JSON ou XML d'après une structure arbitraire.

Faker

Génération de données.

Mockup

FreezeGun

Mockup du module datetime permettant de simuler des changements de temps.

Responses

Mockup du module Requests permettant de simuler les réponses d'un serveur HTTP.

Profiling

cProfile

Programme fournissant des deteministic profiling de programmes (indique le nombre d'appel de chaque méthode et le temps passé).

Menray

Memory profiler traçant les allocations mémoire dans le code Python, les modules extensions et l'interpréteur.

SnakeViz

Visualisation des rapports de cProfile (web browser).

vprof

Profiling de programmes python permettant de surveiller le temps d'exécution et l'usage mémoire. vprof -c hpm "<cmd>"

Test de charge

Locust

Outil permettant de tester la tenue en charge d'applications (initialement web servers).

Traceur d'exécution de code

Python-hunter

Traçage des appels de fonctions, du code exécuté et des valeurs retournées (vs. smiley, pytrace, PySnooper).

Debugger

Manhole

Service (interface via une socket Unix permettant l'accès à un REPL) permettant l'inspection d'un programme en cours d'exécution.

Implémentations

CPython

Implémentation de référence du language Python.

Développement de CModules

Debug

Activation du mode développeur python -X dev ou PYTHONDEVMODE=1 python (cf. Python Development Mode).

Cinder

Implémentation CPython optimisée par Instagram :

Modules intéressants

Bases de données

PySpark

Binding Python a Apache Spark permettant le traitement de bases de données massives, lorsque Pandas devient trop lent.

Benchmarking

CSV

csvkit

Ensemble d'outils en ligne de commande pour convertir en csv et pour les manipuler.

Graphique

mpl_chord_diagram

Génération de Chord diagrams avec matplotlib.

networkX

Représentation de graphs.

pyfiglet

Représentation de texte sous forme d'ASCII art font.

Logs

eliot

Génération de logs sous forme d'arbre.

structlog

Formattage de logs.

Manipulation de classes

Immutables

Création de tables de hashage immutables.

attrs

Création de classes en évitant l'écriture du boilerplate code (possibilité de créer des objets immutables).

Médias

youtube-dl

Téléchargement de vidéo depuis youtube, utilisé par mpv.

wikipedia

Wrapper permettant l'accès au contenu de wikipedia.

Sérialization/déserialization

ijson

Parser JSON ne nécessitant pas que l'ensemble de la donnée soit chargée pour la parser (optimisation de la mémoire consommée, cf. JSON memory streaming - Pythonspeed).

Surveillance de fichers

watchfiles

Surveillance de fichiers basé sur la librarie Rust Notify.

Vulnérabilités/Cyber

Web-scaping

scrapy

Framework d'extraction de données depuis des site web.

Génération et déploiement

Génération d'un artifact distribuable depuis le code source

Stockage et distribution de l'artifact

  • Utilisation de pip.

Les fichiers requirements.txt

  • Il peut être intéressant de produire différents fichiers requirements.txt selon l'usage souhaité:

    • /requirements/app.txt pour les dépendances nécessaires à l'exécution du code,
    • /requirements/test.txt pour les dépendances nécessaires aux tests du code.
  • Dans un environnement de dev virtualisé, la commande pip freeze permet d'obtenir l'ensemble des dépendances et leurs version, récursivement.
  • Pip-tools propose des outils permettant de simplifier la gestion des dépendances:

    • pip-compile --generate-hashes -o ./requirements.txt permet la génération de fichiers requirements.txt depuis les setup.py ou requirements.in d'un package,
    • La génération de hashes (option generate-hashes) permet la vérification, lors de l'installation des dépendances, d'en vérifier la non altération (par rapport au paquet utilisé lors de la génération de notre package),
    • pip-compile --generate-hashes --extra dev -o ./requirements_dev.txt permet la génération d'un fichier requirements_dev.txt comprenant les dépendances identifiées par les fichiers install_requires et extras_require[dev].
  • devpi fournit un serveur PyPI-compatible (mirroir PyPI) et un utilitaire en ligne de commande pour les activités de mise en paquet, test (intégration avec Jenkins) et livraison.

Gestion des dépendances et de leur version et leur cloisement par projet

  • Utilisation de virtualenv,
  • utiliser python -m pip et python -m venv (exécution du module en tant que script, au lieu de pip et virtualenv) permet d'éviter les incohérences entre les différents répertoires des packages Python (cas lorsqu'un répertoire est présent dans le PYTHONPATH et qu'un autre l'est dans le PATH).