14 KiB
Python
- Language
- Frameworks
- UI
- Outils
- Implémentations
- Modules intéressants
- Modules amustants
- Performances
- Génération et déploiement
- Optimisations
- Tips
- Différence entre les opérateurs + et +=
- type == object
- Any et all d'un iterable vide
- Ordre de résolution des attributs
- Attribut imag des types numériques
- Evaluation tardive
- Arrondir les flottants en python
- Compter la fréquence des éléments d'une liste
- Génération chaine de caractères aléatoires
- List vs deque
- Obtenir la clé d'un dictionnaire pour laquelle la valeur est la plus petite
- Modifier le style du texte affiché sur une console
- Trouver le premier élément d'un iterable satisfaisant avec any
- Howtos
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
Outils
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.
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.
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'accroître 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.
Générateur de données
Gestion dépendances
Mockup
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).
Specialist
Outil permettant d'indiquer le code optimisé par la spécialisation du bécote (cf. PEP 659 – Specializing Adaptive Interpreter).xo
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).
Implémentations
CPython
Implémentation de référence du language Python.
Développement de CModules
Références
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.
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).
Stockage des données
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.
Modules amustants
pythonji
Utilisation d'emojis pour l'écriture de code en Python
Génération et déploiement
Génération d'un artifact distribuable depuis le code source
- Utilisation de setuptools.
- Template de fichier setup.py.
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 fichiersrequirements.txt
depuis lessetup.py
ourequirements.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 fichierrequirements_dev.txt
comprenant les dépendances identifiées par les fichiersinstall_requires
etextras_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
etpython -m venv
(exécution du module en tant que script, au lieu depip
etvirtualenv
) permet d'éviter les incohérences entre les différents répertoires des packages Python (cas lorsqu'un répertoire est présent dans lePYTHONPATH
et qu'un autre l'est dans lePATH
).
Optimisations
Création automatique de constantes numériques lors de la génération du bytecode
y = x * 5 / 9 # Une multiplcation par un entier, suivie par une division par un entier
y = x * (5 / 9) # Le ratio 5 / 9 est calculé lors de la génération du bytecode associé à la ligne : une seule multiplication par un flottant lors de l'exécution de l'opération
A partir de Python3.11, les opérations entre types identiques (ie: int+int) peuvent être spécialisées (cf. Python Perf: Specializing, Adaptive Interpreter - Talk Python Live Stream - YouTube - augmentation des perfs).