Mon Labo Python

Comment organiser ses scripts Python dans des dossiers pour s'y retrouver

Organisation de scripts Python en dossiers : arborescence claire après rangement pour une débutante en code

Encore une fois, la recherche Windows me renvoie une dizaine de fichiers nommés script_v2, script_vraiment_final et un mystérieux test3, et aucun ne porte le nom du calcul que je cherchais depuis dix minutes. Après deux ans à apprendre Python en solo, le soir, j'applique maintenant une règle simple : organiser mes scripts Python n'est pas un luxe de développeuse confirmée, c'est ce qui m'a permis, en tant que débutante en code, de continuer à avancer sans perdre une soirée entière sur la gestion des fichiers avant même de pouvoir écrire une ligne utile. Pas de professeur pour relire mon arborescence, pas de plateforme qui me met un zéro si je range mal : juste quelques règles que j'applique maintenant à chaque nouveau projet, utiles à qui apprend en autodidacte sans personne pour corriger sa façon de ranger.

Avant d'aller plus loin, une précision : certains liens de cet article sont affiliés, dont celui vers la Formation au langage Python [Mon point de départ] que j'ai suivie au début de mon apprentissage. Si un achat passe par ce lien, une petite commission m'est reversée, sans que le prix change pour vous. Je ne cite que ce qui a vraiment traversé mes soirées de travail.

Mon parcours ne vient pas d'une formation informatique structurée. Au tout début, je m'étais inscrite à un MOOC en ligne avec de bonnes résolutions, et je l'ai abandonné après la deuxième semaine parce que le rythme ne correspondait à rien de ce que je pouvais tenir après une journée de bureau. Ce que je sais sur l'organisation de mes fichiers, je l'ai donc appris sur le tas, dossier après dossier, en cassant régulièrement mes propres scripts avant de trouver ce qui tenait debout.

Le bazar qui m'a forcée à organiser mes scripts Python

Quand j'ai commencé Python, j'étais tellement contente de voir trois lignes de code fonctionner que je les enregistrais n'importe où. Mon bureau Windows ressemblait à une pièce qu'on n'a jamais le temps de ranger : des fichiers .py (l'extension standard des scripts Python) coincés entre une photo de vacances et un PDF sans rapport, aucun classement, aucune logique. Plus mes scripts devenaient complexes, plus cette pagaille devenait un vrai problème : je passais davantage de temps à chercher mon code qu'à en écrire, ce qui, pour une débutante en code qui n'a qu'une heure ou deux par soir, est exactement le genre de perte qu'on ne peut pas se permettre.

Bureau d'ordinateur encombré de fichiers de scripts Python mal nommés, avant toute organisation

La première tentative de rangement a été simple et trompeuse : j'ai créé des dossiers "Travail", "Exercices", "Perso", comme on range des étagères par catégorie. C'était propre à l'œil, mais dès que j'ai relancé mes scripts depuis leur nouvel emplacement, plus rien ne fonctionnait. Python ne retrouvait aucun de ses repères, et j'ai compris qu'en programmation, déplacer un fichier n'a rien à voir avec déplacer un carton d'un placard à un autre.

Ce qui se casse quand on déplace un script Python

Tout se résume à un mot : le chemin. Python a besoin d'une adresse précise pour retrouver chaque fichier et chaque module qu'un script appelle. Tant que tout reste au même endroit, cette adresse ne bouge pas et personne ne s'en soucie. Dès qu'on déplace un script vers un dossier plus "propre", cette adresse change, et si ce script dépendait d'un autre fichier resté ailleurs, Python va le chercher exactement où il pensait qu'il était, pas où on l'a rangé pour que ça ait l'air net.

J'ai découvert ça un dimanche après-midi, en déplaçant tous mes scripts dans un dossier appelé "Propre" pour finir noyée sous une avalanche de messages ModuleNotFoundError. Ce message d'erreur n'est qu'un parmi d'autres qui peuvent surprendre au début, mais je sais maintenant exactement ce qu'il signifie : Python cherche un fichier là où il ne se trouve plus. Perrine, une lectrice de Bordeaux qui automatise ses tableaux de comptabilité depuis qu'elle me suit, m'a écrit un jour que pour elle, un script qui ne trouve plus son module, c'est comme une recette qui demande un ingrédient resté dans le mauvais tiroir, et cette image m'a semblé tellement juste que je l'ai gardée.

Message d'erreur ModuleNotFoundError affiché après le déplacement d'un script Python mal rangé

Construire une arborescence qui tient la route

Ce qui m'a fait sortir de ce cercle, c'est un petit fichier vide nommé __init__.py. Au début, je pensais que créer un fichier qui ne contient rien était une blague. En réalité, ce fichier dit à Python : ce dossier n'est pas juste un tas de fichiers en vrac, c'est un ensemble organisé que tu as le droit d'explorer. C'est une règle documentée que j'ai fini par appliquer, et dès que je l'ai ajoutée au bon endroit, mes imports ont recommencé à fonctionner. Pour aller plus loin sur la façon dont Python regarde ce qui existe sur le disque, j'avais aussi lu cet article sur comment vérifier si un fichier existe python sans faire planter son script, qui complète bien cette logique.

La première fois que j'ai retapé "python mon_script.py" après avoir tout réorganisé et que le terminal m'a renvoyé exactement le texte attendu, sans une seule ligne rouge, je suis restée silencieuse quelques secondes devant l'écran. J'ai envoyé un message à Cassandre, mon amie d'enfance, qui ne comprend strictement rien à ce que je fais de mes soirées mais qui a répondu avec une rafale d'émojis, comme chaque fois que je lui annonce une petite victoire.

Les trois réglages qui évitent de recasser son code en rangeant

Sans être experte du système de fichiers, voici ce qui fonctionne chez moi. J'utilise des underscores plutôt que des espaces ou des tirets pour nommer mes dossiers, parce que Python se bloque sur les espaces au moment d'importer quelque chose. Je garde des noms de fichiers courts : "calcul_eau.py" plutôt qu'un nom à rallonge qui décrit toute la fonction en une phrase, même si le guide PEP 8 recommande surtout la sobriété pour la lisibilité du code, pas seulement pour les noms de fichiers. Et je sépare systématiquement mon code source, dans un dossier "src", de mes données, dans un dossier "data", un peu comme on range les ingrédients d'un côté et les ustensiles de l'autre, pas ensemble dans le même tiroir.

Note manuscrite du nom de fichier __init__.py, repère pour organiser ses dossiers Python

Derrière tout ça, il y a une liste que Python consulte, le "sys.path", qui recense les dossiers où il a le droit de chercher. Si le vôtre n'y figure pas, Python fait la sourde oreille, peu importe à quel point votre rangement vous semble logique. Je n'ai pas encore pris le temps de mettre en place un environnement virtuel séparé pour chaque projet, ce qui viendrait sans doute clarifier encore ce "sys.path", mais pour l'instant je m'en tiens à des structures simples que je comprends entièrement, plutôt que d'empiler des outils que je maîtriserais à moitié.

Ranger ses fichiers au quotidien n'exige pas une structure imposée

Un ami qui a repris des études en informatique m'a fait réaliser à quel point ma liberté de rangement était confortable. Lui doit respecter une arborescence précise imposée par ses enseignants, et si un fichier n'est pas dans le sous-dossier attendu, sa plateforme de rendu automatique lui met un zéro sans discussion. Nous, les autodidactes qui apprenons seules le soir, on peut tâtonner, essayer un dossier "Propre" qui ne marche pas, recommencer. Mais s'habituer à ranger ses scripts prépare aussi à des structures plus rigides, le genre de rigueur qu'on retrouve par exemple dans une Formation Cisco : réseaux et systèmes [Pour plus tard], que je garde de côté pour plus tard, même si pour l'instant ça reste pour moi aussi lointain que du chinois.

Le soulagement, les épaules qui se relâchent quand un script s'exécute enfin sans erreur de chemin, reste ma petite victoire du soir. Mon bureau n'est pas parfait, il traîne encore quelques fichiers mal nommés, mais je ne perds plus un quart d'heure à chercher mon code avant de pouvoir pratiquer.

Espace de travail rangé avec ordinateur portable et tasse de thé, après la réorganisation des fichiers Python

Si vous débutez, la règle que je donnerais est simple : n'attendez pas d'avoir cent fichiers pour créer vos premiers dossiers, créez-les dès la dizaine, pendant qu'il reste facile de tout déplacer sans rien casser. C'est comme la vaisselle : plus facile au fur et à mesure que d'un coup, une fois par mois. Et si c'est surtout le nom de vos fichiers et variables qui vous donne du fil à retordre, mes astuces pour bien nommer ses variables Python en suivant la PEP 8 suivent à peu près la même logique.

Une fois Python un peu plus clair, l'étape suivante que j'ai en tête, sans urgence, c'est le web : j'ai mis de côté cette JavaScript : formation 100 % pratique [Autre piste] pour les soirs où mes dossiers Python seront vraiment tous rangés. Ce n'est pas pour tout de suite : j'ai encore une petite erreur de virgule à régler sur mon script de budget avant d'aller me coucher, et je me demande toujours si les développeurs chevronnés ont, eux aussi, un dossier "brouillon_final_v3" caché quelque part.

Si vous voulez vous aussi arrêter de chercher vos fichiers pendant de longues minutes et apprendre à coder un peu plus proprement, je ne peux que recommander la formation que j'ai suivie pour poser les bases. Ce n'est pas elle qui m'a appris à ranger mes dossiers, mais sans elle, je n'aurais sans doute jamais écrit assez de scripts pour avoir besoin de le faire.

Articles connexes