12 KiB
Python
- Language
- Frameworks
- UI
- Outils
- Implémentations
- Modules intéressants
- Performances
- Génération et déploiement
- 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
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.
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.
Générateur de données
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).
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
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.
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.
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
- 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
).