Les bonnes pratiques pour faire du Python

Je saute dans le wagon sans avoir payé mon ticket, déso.

Use a tool like mise or pyenv to install Python on your development systems

Pas d’accord, compiler Python c’est ./configure; make; make altinstall, le seul truc chiant c’est d’avoir toutes les bonnes dépendances, chose que pyenv ne résoud même pas. Par contre pyenv amène pléthore de bidouilleries innutiles qui me sortent par les yeux. Je veux un outil qui fasse une chose et qui le fasse bien, pas “ah et attends j’te drop 3 symlinks là et un fichier de conf là et un hook dans ton bashrc et …” wow stop.

A la limite pour ceux qui veulent vraiment re-compiler des versions de Python tous les matins et qui veulent plus court que ./configure; make; make altinstall (comme moi) j’ai fait : https://git.afpy.org/mdk/compile-python qui me semble beaucoup plus sain que pyenv (mais je suis biaisé c’est moi qui l’ai fait).

Use The Most Recent Version of Python That You Can

Yeah, +1.

Avoid using Python 2

Yeah +1000.

Use pipx To Run Developer Applications

OK oui pourquoi pas.

python3 -m pip install --user pipx

ahh bah non ça c’est débile, si j’utilise pipx c’est pas pour me retrouver avec une install hors venv. Ça ne passe même pas sur des OS récents :

python3 -m pip install --user pipx
error: externally-managed-environment

qui 3 lignes plus loin conseille lui-même d’installer pipx :

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

donc non, surtout pas pip install --user pipx mais sudo apt install pipx.

Avoid Using Poetry

+1, ma raison : j’utilise des outils qui ne font qu’une seule chose mais qui le font bien.

Use a pyproject.toml File

+1

Create a Directory Structure That Uses the src Layout

-0 : ça ne fait pas consensus (il existe plus de projets Python sans src/ qu’avec). Je n’utilise pas de dossier src pour plusieurs raisons :

  • pouvoir lancer python -m pytest avant d’avoir pris le temps de packager (wow l’argument, lol)
  • juste pouvoir tester un truc dans un REPL sans se casser la tête: lancer Python, importer le truc, jouer avec.
  • dans mon dossier src il n’y aurait qu’un seul dossier du nom du paquet, ça me semble bien inutile, un dossier qui contient un dossier.

Use Virtual Environments for Development

Évidement.

Use Requirements Files to Install Packages Into Environments

Oui.

Format Your Code

+1 sauf pour ceux qui sont tous seuls sur leur projet ET qui sont capable de faire mieux que Black. Il faut être un artiste, mais j’en connais (Entwanne par exemple).

Use a Code Linter

+1 mais flake8 is currently the most popular linter for Python j’aurais plutôt dit pylint, dommage qu’il ne parle pas de pylint, ça poutre pylint.

Test with pytest

+1000, il aurait parlé de nose j’aurais fermé l’onglet.

Package Your Applications

+1

Use Type Hinting

Ouai alors euh, on est dans un pays libre hin, chacun fait comme il veut.

Format Strings with f-strings

+0, j’adore les f-strings, mais il n’y a pas que ça, l’internationalisation c’est important aussi.

Use Datetime Objects with Time Zones

+1

Use enum or Named Tuples for Immutable Sets of Key-Value Pairs

+0

Create Data Classes for Custom Data Objects

+1 mais attends c’est quoi des “Data objects” ? Ça n’a aucun sens, tous les objets sont des “data objects”, dit autrement, il ne devrait pas exister d’objet dont le seul but ne soit pas de contenir de la donnée… (sauf une sentinelle ?).

Use collections.abc for Custom Collection Types

-0, on est pas en C++ non plus.

Use breakpoint() for Debugging

+1

Use Logging for Diagnostic Messages, Rather Than print()

+1

Use The TOML Format for Configuration

+100

Only Use async Where It Makes Sense

Ouai enfin c’est très généralisable… “Only use regex when it makes sense”, “Only use the network when it makes sense”, “Only use antibiotics when it makes sense”, …

Handle Command-line Input with argparse

+1

Use pathlib for File and Directory Paths

+1

Use os.scandir() Instead of os.listdir()

Bah non, Pathlib.walk, faut être cohérent avec l’item précédent, c’est généré par une IA ou quoi ?

Run External Commands with subprocess

+1, c’est plus rapide qu’avec M-x butterfly-execve.

Dans la description de ce paragraphe on trouve rather than shell backquoting, ça n’a jamais existé en Python, cet article est rédigé par une IA j’aime pas ça…

Use httpx for Web Clients

+0, pas d’avis, j’ai essayé mais quand c’était en beta donc mon avis ne compte pas, je dois reessayer.

6 « J'aime »