Update python, postgres, linux and textual notes
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
:PROPERTIES:
|
||||
:ID: 4fabfe6a-b104-464f-8a87-dfd7d761dbcc
|
||||
:mtime: 20220720145510
|
||||
:mtime: 20221003215204
|
||||
:ctime: 20211230101535
|
||||
:END:
|
||||
#+title: Python
|
||||
@@ -30,10 +30,12 @@ La méthode ~__repr__~ est utilisée pour le debug quand ~__str__~ pour l'utilis
|
||||
** Functools module
|
||||
*** [[id:25d994fd-375b-429d-af38-6afba818159f][functools.singledispatch]]
|
||||
|
||||
|
||||
* Frameworks
|
||||
** Web
|
||||
*** [[id:26b04294-75e8-4043-a9a6-a20acd952963][Flask]]
|
||||
|
||||
|
||||
* UI
|
||||
** GUI
|
||||
*** [[https://kivy.org/#home][Kiwi]]
|
||||
@@ -48,6 +50,7 @@ Bindings python pour Qt.
|
||||
** Text UI
|
||||
*** [[id:6cc56ee4-6d42-4d50-beb3-bb22a98298dd][textual]]
|
||||
|
||||
|
||||
* Outils
|
||||
** Analyseur statique de code
|
||||
*** [[id:1d258869-5421-496a-b296-2d157ebdf3b6][mypy]]
|
||||
@@ -61,11 +64,14 @@ Outil en ligne de commande permettant d'automatiser les tests dans multiples env
|
||||
** Couverture de code
|
||||
*** [[https://github.com/plasma-umass/slipcover][Slipcover]]
|
||||
Outil de mesure de couverture de code plus rapide que [[https://github.com/nedbat/coveragepy][coverage.py]].
|
||||
** Debugger
|
||||
*** [[https://github.com/ionelmc/python-manhole][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
|
||||
*** [[https://github.com/hhatto/autopep8][autopep8]]
|
||||
Utilitaire formattant le code afin de respecter la [[https://www.python.org/dev/peps/pep-0008/][PEP8]] guideline. Il est basé sur l'analyse de code effectuée par
|
||||
[[https://github.com/PyCQA/pycodestyle][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).
|
||||
[[https://github.com/PyCQA/pycodestyle][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).
|
||||
*** [[https://github.com/PyCQA/isort][isort]]
|
||||
Outil classant les imports par ordre alphabétique, les séparant par section et par type.
|
||||
*** [[https://black.readthedocs.io/en/stable/][Black]]
|
||||
@@ -81,6 +87,8 @@ Génération de données pouvant être utilisées pour:
|
||||
* Créer des fichiers JSON ou XML d'après une structure arbitraire.
|
||||
*** [[https://github.com/joke2k/faker][Faker]]
|
||||
Génération de données.
|
||||
** Gestion dépendances
|
||||
*** [[id:01f24d29-e833-4bfa-acb0-95140800d081][poetry]]
|
||||
** Mockup
|
||||
*** [[https://github.com/spulec/freezegun][FreezeGun]]
|
||||
Mockup du module [[https://docs.python.org/fr/3/library/datetime.html][datetime]] permettant de simuler des changements de temps.
|
||||
@@ -94,6 +102,8 @@ méthode et le temps passé).
|
||||
/Memory profiler/ traçant les allocations mémoire dans le code Python, les modules extensions et l'interpréteur.
|
||||
*** [[https://jiffyclub.github.io/snakeviz/][SnakeViz]]
|
||||
Visualisation des rapports de /cProfile/ (web browser).
|
||||
*** [[https://github.com/brandtbucher/specialist][Specialist]]
|
||||
Outil permettant d'indiquer le code optimisé par la spécialisation du bécote (cf. [[https://peps.python.org/pep-0659/][PEP 659 – Specializing Adaptive Interpreter]]).xo
|
||||
*** [[https://github.com/nvdv/vprof][vprof]]
|
||||
Profiling de programmes python permettant de surveiller le temps d'exécution et l'usage mémoire.
|
||||
~vprof -c hpm "<cmd>"~
|
||||
@@ -104,9 +114,6 @@ Outil permettant de tester la tenue en charge d'applications (initialement web s
|
||||
** Traceur d'exécution de code
|
||||
*** [[https://github.com/ionelmc/python-hunter][Python-hunter]]
|
||||
Traçage des appels de fonctions, du code exécuté et des valeurs retournées (vs. smiley, pytrace, PySnooper).
|
||||
** Debugger
|
||||
*** [[https://github.com/ionelmc/python-manhole][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
|
||||
@@ -121,6 +128,7 @@ Activation du mode développeur ~python -X dev~ ou ~PYTHONDEVMODE=1 python~ (cf.
|
||||
Implémentation CPython optimisée par Instagram :
|
||||
* [[https://engineering.fb.com/2022/05/02/open-source/cinder-jits-instagram/][Jit]]
|
||||
|
||||
|
||||
* Modules intéressants
|
||||
** Bases de données
|
||||
*** [[https://spark.apache.org/docs/latest/api/python/][PySpark]]
|
||||
@@ -157,6 +165,8 @@ Wrapper permettant l'accès au contenu de wikipedia.
|
||||
*** [[https://github.com/ICRAR/ijson][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. [[https://pythonspeed.com/articles/json-memory-streaming/][JSON memory streaming - Pythonspeed]]).
|
||||
** Stockage des données
|
||||
*** [[https://github.com/theskumar/python-dotenv][dotenv]]
|
||||
** Surveillance de fichers
|
||||
*** [[https://watchfiles.helpmanual.io/][watchfiles]]
|
||||
Surveillance de fichiers basé sur la librarie Rust /Notify/.
|
||||
@@ -166,6 +176,12 @@ Surveillance de fichiers basé sur la librarie Rust /Notify/.
|
||||
*** [[https://scrapy.org/][scrapy]]
|
||||
Framework d'extraction de données depuis des site web.
|
||||
|
||||
|
||||
* Modules amustants
|
||||
*** [[https://github.com/gahjelle/pythonji][pythonji]]
|
||||
Utilisation d'emojis pour l'écriture de code en Python
|
||||
|
||||
|
||||
* Performances
|
||||
** [[id:b9f392bd-bd45-4e9e-94ec-b19caedff86f][List vs tuple]]
|
||||
** [[id:26e1fdfb-1f8e-4c62-a08f-468a56ab03c8][Peephole optimization]]
|
||||
@@ -198,6 +214,14 @@ Framework d'extraction de données depuis des site web.
|
||||
* 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~).
|
||||
|
||||
* Optimisations
|
||||
** Création automatique de constantes numériques lors de la génération du bytecode
|
||||
#+BEGIN_SRC python :results output
|
||||
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
|
||||
#+END_SRC
|
||||
A partir de Python3.11, les opérations entre types identiques (ie: int+int) peuvent être spécialisées (cf. [[https://www.youtube.com/watch?v=tNs18GDmAfg][Python Perf: Specializing, Adaptive Interpreter - Talk Python Live Stream - YouTube]] - augmentation des perfs).
|
||||
|
||||
* Tips
|
||||
** [[id:24408701-21d8-4f4e-aed9-c58746df2244][Différence entre les opérateurs + et +=]]
|
||||
** [[id:a32ab138-f9a8-4d61-9c09-97953c5a0a92][type == object]]
|
||||
|
Reference in New Issue
Block a user