Session du 06 novembre 2024 à 21h00
Data Science & IA
Outils & IDE
Librairie Standard & Modules
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat "foire aux questions"
Session de 30 min, libre, où vous pouvez poser vos questions.
00:00:42 :Pour moi, pour l'instant, je suis en train de, je débute, j'ai commencé en novembre, donc là je suis un peu sur les classes.Donc là c'est un peu, bon, pour ça j'ai pas trop encore de questions, mais c'était juste un peu pour situer où j'étais.
00:01:06 :Et c'est vrai que là je galère un petit peu, mais bon je pense qu'au début c'est un peu normal.Tout ce qui est POO là, et puis c'est là où je suis actuellement, jusqu'à présent ça allait plus ou moins, et puis là, bon, il faut que je remarque la différence.
00:01:22 :Alors souvent la POO, en Python les gens abordent ça avec des fois un mindset, qu'on voit ça va être plus complexe, mais en fait en Python tu verras normalement,c'est finalement une scène de concept qui est relativement compacte, et qu'on peut assez vite prendre en main.
00:02:13 :Bonsoir.Bonsoir.Bonsoir.Bonsoir Thierry.Bonsoir Sylla.Bon comme je t'avais dit sur le message là, j'ai un peu voulu suivre mon projet là, je ne sais pas si je peux partager.
00:02:47 :Je vais voir.Ouais, je vais voir.Je ne sais pas si vous voyez mon écran.Oui, alors pour l'instant on voit le navigateur, et voilà, on est sur l'éditeur de code.
00:03:07 :Voilà, donc j'avais un peu réformulé le truc, donc j'avais changé le truc là, j'ai mis rapport, donc dedans j'ai, comme tu m'avais dit.Avant de continuer, je mets un petit peu de contexte pour les autres.
00:03:55 :Donc c'est ça, c'est juste.Voilà, donc j'avais créé un dossier queries, comme tu m'avais dit, chaque requête j'ai mis dans un fichier SQL, je pense là c'est mieux.
00:04:31 :Donc chaque requête est dans un fichier et j'ai un dossier où je mets les résultats avant d'envoyer le mail.Bon là j'ai créé juste un contrôleur et j'ai fait mon mail ici.
00:04:49 :Donc le mail est là.Donc tout simplement qu'est-ce que je fais, d'abord quand j'exécute le mail, j'ai créé un SQL Read qui va récupérer tous les fichiers SQL ici et il les charge dans un dictionnaire.
00:05:10 :J'ai un clé, le nom et le contenu de la requête.D'accord, oui.Donc une fois ça, là je récupère le format de ma date, je fais ma connexion, j'exécute et là je crée le fichier Excel avec cette méthode qui est là et lui il crée le fichier SQL et après créer, j'envoie avec la méthode là pour envoyer le mail.
00:05:40 :Et là ça marche, ça marche très bien.Maintenant mon souci c'est, parce que l'objectif c'est quoi, c'est de créer un job qui va exécuter chaque jour, chaque matin.
00:06:45 :AppScheduler.AppScheduler, ça c'est du coup un paquet Python dans lequel tu vas pouvoir par exemple, tu vas démarrer ton programme.Tu vas tourner en tâche de fond et puis tu peux lui demander, alors tu peux choisir la logique en fait d'exécution du code.
00:07:08 :L'avantage de AppScheduler c'est que c'est du pur Python et donc c'est éventuellement quelque chose que tu peux après exécuter sur n'importe quel système.Tandis que si tu utilises le task scheduler de Windows, ça c'est pas possible, mais là t'es obligé de l'exécuter sur une machine Windows.
00:07:27 :D'accord, d'accord, d'accord.Donc au fait, c'est ça, mais d'abord, si je prends le programme que tu m'avais envoyé, le mvc, quand je met Python.m package, là il exécute directement la fonction en fait.
00:07:44 :Voilà, et puis là, comme tu le fais, c'est même pas nécessaire dans le main de mettre la protection ifname égale main.Ok.De toute manière, ce fichier main, il sera exécuté uniquement lorsque tu fais ta commande Python-m et puis le nom du répertoire, donc ici rapport.
00:08:05 :D'accord.Donc là, ce qu'il faut que tu fasses, c'est que tu exécutes ta fonction main en lui passant en argument le résultat de SQL.Mais quand je le mets comme ça, je n'ai pas l'impression, vous voyez, là il n'exécute pas, il n'y a pas d'erreur, mais il n'exécute pas le main.
00:08:28 :Alors.Par contre, quand je mets la run main, ça marche.Ok, je crois que je vois ce que c'est.Je ne sais pas ce que c'est.
00:08:42 :On peut aller voir dans, montre-moi une commande que tu lances et qui fonctionne.Ok.Dans même Python, toutes les commandes de pip marchent.Non, non, pour démarrer ton main en fait.
00:09:05 :Non, c'est ça, je n'arrive pas à démarrer le main.Tout ce que je fais actuellement, je mets run comme ça par exemple, ou debug.Là, ça marche.
00:09:15 :Et puis, vous voyez, là j'exécute comme ça.J'ai mis run, là il crée le truc.Ok.Là, il exécute, c'est comme ça, il récupère les fichiers.
00:09:29 :Ça prend un peu de temps avec le réseau, tout ça.Là, il a créé l'autre fichier.Il y a trois fichiers actuellement, il y a trois SQL.
00:09:44 :Ok, et la commande que tu as lancée.Là, il a envoyé le mail.Là, ça marche.Remontre-moi la commande que tu as exécutée.Non, j'ai juste mis sur le fichier run.
00:09:55 :Ah ouais, run.Ok, donc tu fais un run de main.Non, ça ne devrait pas fonctionner si tu le fais comme ça.Mais ce que je voulais, c'est comme tu m'as dit, c'est que j'exécute là,Python mon m-rapport.
00:10:11 :Mais lui...Je suis en train de regarder mon rapport.Peut-être là, il faudrait que tu me...Toi, ce code, tu l'as sur un GitHub ?
00:10:21 :Non, je ne l'ai pas mis sur un repo.Est-ce qu'il est grand ?Bon, pas trop.Ce n'est pas trop grand.Si ce n'est pas trop grand, tu pourrais me le zipper et me l'envoyer en privé.
00:10:36 :Il n'y a pas de problème.Il faut que je puisse l'exécuter chez moi et que je regarde pourquoi ça ne donne rien ici.D'accord, ça marche.
00:10:49 :Il n'y a pas de problème.Je fais le débugage hors session et je t'envoie ça.Comme ça, je laisse des espaces pour les questions.Ça marche. Je vais zipper ça et je t'envoie ça.
00:11:02 :Après, moi je regarde ça encore.Ok, ça marche.Il n'y a pas de problème.J'ai constaté aussi, moi qui utilise aussi PyCharm,que parfois il y avait des différences entre la commandequand on veut lancer un programme depuis le terminal de PyCharmet depuis le bouton Run en haut du terminal.
00:11:26 :Je me demande si ça ne peut pas venir que parfois il faut faire un clic droitsur les fichiers dans l'arborescence et mettre Mark As Source Routeou quelque chose comme ça.
00:11:39 :Et qu'après, quand on a fait ça, ça marche.Mais je ne sais pas très bien ce que ça change dans la ligne de commande.Il y a plein de propos dans PyCharm qui font que c'est exactement la raisonpour laquelle j'utilise PyCharm.
00:11:53 :Donc, avoir normalement la commande ici,par rapport aux réponses que je vous avais faites comme exemple.En tout cas, je crois que c'était là quand on avait fait l'exemple du MVC.
00:12:07 :Donc, l'architecture semble correcte comme ça.Donc, le lancement au terminal devrait fonctionner quelle que soit la plateforme ici.C'est l'avantage du lancement au terminal.Je recommande au début de le faire vraiment systématiquement comme ça.
00:12:21 :Donc, je regarde tout à l'heure pourquoi ça ne se lance pas.Et puis, je te redis.Pourquoi maintenant ça ne se lance pas avec la commande run ?
00:12:28 :En fait, le truc, c'est que quand tu fais un programmequi est multi-paquets comme ça,qui utilise des répertoires et des fichiers IMIT en fait,donc qui utilise des packages,tu devrais lancer les fichiers commande module,ce que tu fais dans le terminal avec ton python-m et le nom du module.
00:12:49 :Alors, quand on démarre ça avec PyCharm,on doit activer l'option module.Sinon, il va essayer de lancer une sorte de fichier.Et ça, ça fonctionne pour des scriptset vraiment assez mal pour des projets multi-fichiers.
00:13:05 :Et donc, il faut activer cette option-là.Donc, il faut voir comment tu as configuré la commande run de manière générale, effectivement.Et puis, ce n'est pas tellement une histoire de source,mais c'est une histoire de lancer commande module ou pas.
00:13:21 :Mais c'est le contraire, en fait.Souvent, la commande run marche, alors que depuis le terminal, ça ne marche pas.Bon, ça marche toujours depuis le terminal.
00:13:30 :Là, par exemple, dans l'exemple de Sylla, ça ne marchait pas depuis le terminal.Alors là, il faut que je regarde pourquoi ça ne fonctionne pas.
00:13:37 :Mais je crois que je n'ai jamais eu d'exempleoù j'avais un comportement dans le terminal de PyCharm, par exemple.Mais où j'avais un comportement qui était non-standard dans le terminal de PyCharmet qui serait dû à un réglage de PyCharm.
00:13:57 :Les réglages de PyCharm ont plutôt impacté, j'ai l'impression, le bouton runque le démarrage au terminal, normalement.Après, de nouveau, ça va toujours dépendre de où on se trouvequand le terminal est ouvert par rapport à son arborescence de fichiers.
00:14:17 :Certaines personnes mettent leur code Python dans un fichier source ou un truc comme ça.Et ça, ce n'est pas forcément une pratique très recommandée.Mais éventuellement, ça embête un petit peu PyCharm dans les démarrages.
00:14:34 :C'est possible.Je regarde l'architecture du projet.Je vais essayer de mon côté de démarrer chez moi.Je ne suis pas dans PyCharm.Je verrai s'il y a une spécificité PyCharm qui fait que ça ne démarre pas.
00:14:54 :Tu disais que tu n'étais pas dans PyCharm, que tu étais dans VS Code.Oui.Ok.Oui, PyCharm a quand même pas mal de...PyCharm dans la version gratuite, parce que je ne me vois pas tellement payé pour en aider,alors qu'il y en a des très bons gratuits.
00:15:17 :PyCharm Community, pour du Django, il y a plein de choses que tu ne peux pas faireet qui sont disponibles de base dans, par exemple, VS Code.
00:15:26 :Donc, moi, je fais exclusivement du Django et du web.Pour le coup, PyCharm est un petit peu limité pour ça, par exemple,dans certaines fonctions de déblocage.
00:15:40 :Et puis, également, quand tu te retrouves à faire du web,tu te retrouves souvent à programmer dans plusieurs langages.PyCharm est très à l'aise en Python, mais il n'est pas forcément très à l'aisedans absolument tous les langages qu'ils utilisent.
00:15:53 :Donc, je préfère avoir que ce soit des flexibles.Ok.Est-ce que je vais poser quand même la question, parce qu'en général,on a plutôt l'impression que professionnellement,les gens utilisent PyCharm quand ils veulent faire du Python, tu vois ?
00:16:06 :Alors, certaines personnes utilisent PyCharm, en fait.Je dirais, ce qu'ils font, c'est de ne pas devenir dépendants de l'éditeur, finalement.Quand tu programmes professionnellement, moi, je connais autant de gensqui n'utilisent pas PyCharm professionnellementque de gens qui l'utilisent professionnellement.
00:16:23 :Et l'important, c'est d'être à l'aise avec son outilet éventuellement, pas en dépendre trop non plus,suivant une plateforme qui, parfois, n'a pas toujours le choix de son éditeur.
00:16:33 :Donc, c'est pour ça, au début, même si on n'utilise pas PyCharm,tenter en tout cas un maximum d'utiliser,d'éviter au tout début, en tout cas, les intégrations.
00:16:43 :Par exemple, de lancer ses scripts et ses projets dans le terminal,d'activer son environnement virtuel et le créer à la main, par exemple,des choses comme ça, font qu'on ne va pas être dépendant de l'éditeur.
00:17:00 :Une fois qu'on s'est fait à ça, à ce moment-là,après, on peut utiliser l'intégration sans problème.Pareil, si on apprend à utiliser, au début,des outils pour versionner son code, comme Git,PyCharm propose plein, plein de choses qui sont déjà intégréesoù il suffit de cliquer sur des boutons.
00:17:17 :Mais de nouveau, si on utilise ça abondamment lorsqu'on apprend à coder,on peut être relativement vite dépendant de l'outilet pas arriver à s'en sortir dans un certain contexte.
00:17:31 :Donc, c'est un excellent éditeur.Si on est à l'aise avec, c'est relativement productif.Je dirais que moi, je ne suis pas plus productif avec PyCharmque ce que je suis avec un autre éditeur.
00:17:47 :Mais c'est relativement productif.Donc, c'est un bon choix.Mais, de nouveau, c'est un bon choix pour apprendre Python.Après, si on fait du Django,si on fait du web, on se retrouve à faire différentes choses.
00:18:09 :Donc, pas que du Python.Et là, peut-être que ce n'est pas toujours le meilleur outil.En tout cas, dans la version Community, de nouveau,la version Pro est parfaite pour faire du Django professionnellement.
00:18:21 :Mais du coup, il faut payer la version Pro.Je suis d'accord avec toi dans le sens,quand tu commences, si tu es trop assisté, ce n'est jamais bon.
00:18:30 :J'ai remarqué ça aussi.Surtout dans le sens, tout au début,j'avais installé Github Copilotet puis j'étais complètement dépassé dans le sens,ça m'aidait trop, surtout quand tu démarres.
00:18:45 :C'est un peu le même principe.C'est ça.Tout dépend de ce que tu fais.Par exemple, si je prends l'usage d'une bibliothèqueou d'un framework, par exemple, avec Copilotou même simplement avec PyCharm sans Copilot,il fait les imports pour toi, par exemple.
00:19:04 :Ce qui, en soi, n'est pas trop problématiqueque tu connais la bibliothèque que tu es en train d'utiliserou que tu connais le framework que tu es en train d'utiliser.
00:19:13 :Mais ça t'empêche de développer certains réflexeset de développer une certaine connaissancede la bibliothèque ou du framework que tu utilises.Et c'est excellent pour la productivitéparce qu'il y a plein de codes qu'on n'a pas besoin de taper.
00:19:28 :Mais peut-être pour l'apprentissage,au début, ça empêche certains réflexes,certaines recherches ou certaines questions que je me pose.Si je vois la manière dont je raisonne par rapport à du code,par rapport aux imports et tout ça,le fait d'importer moi-même,ce n'est pas juste du code que je tape en plus,
00:19:52 :mais c'est aussi une compréhension finalementde l'architecture et de l'organisation de la bibliothèqueou du framework que je suis en train d'utiliser.Parfois, trop d'automation au tout début,ce n'est pas forcément une bonne chose.
00:20:07 :Après, quand on code professionnellement,puis là, finalement, les journées ont filtréet on essaie d'avancer le plus possiblesans avoir besoin de taper un certain nombre de caractères,c'est probablement une très bonne chose.
00:20:20 :Quand on sait, il n'y a plus de problème.Quand on apprend, ce n'est pas forcément toujoursla meilleure chose d'avoir des raccourcisou trop de raccourcis, disons.
00:20:30 :N'hésitez pas, si vous avez des questions,j'ai vu qu'il y avait des messages,attendez, il faut que je voie comment les afficher.Alors, les liens symboliques, c'est quasiment jamais utile.
00:20:56 :On parlait des liens symboliques, toi,sur les messages, là.Oui, c'est...Baptiste dit qu'il avait eu le même problèmepour le python-m, là.Donc, il a dit qu'il a créé un fichier symboliqueentre le main et le init,et ça a résolu le problème d'inverse de notre code.
00:21:15 :Faut que je voie ça.Je regarde après.Ça marche.C'est comme souvent dans les problèmes d'import,des gens qui manipulent des fois le chemin de recherchede Python pour les modulesen allant directement ajouter au 6.pass
00:21:41 :un répertoire pour qu'il trouve un module.Quand on est obligé de faire ce genre de choses,c'est qu'il y a quelque chose qui joue pasdans l'architecture de son code.
00:21:51 :Donc, en principe,que tout est en place et au bon endroit,on n'a pas besoin de rajouter un lien symboliqueou de rajouter un chemin sur le 6.pass.
00:22:02 :En tout cas, pas dans des exemples relativement simples.C'est vraiment quand on arrive à quelque chose de complexe,une grosse base de code,qu'on commence à voir ça se changer.
00:22:12 :Souvent, la solution, c'est qu'il y a quelque chosequi est soit mal compris localement,soit, voilà, en général, c'est une mauvaise compréhension.Donc, il faut regarder ça de plus près.
00:22:24 :Mais c'est quoi un lien symbolique ?Alors, sous Windows, je découvre qu'il y a des liens symboliques.Mais un lien symbolique,sur la plupart des systèmes qui le supportent,c'est un genre de fichier virtuelqui se fait passer pour un autre.
00:22:44 :Donc, tu as un fichier à un endroit de ton disqueet si tu l'ouvres, ça va ouvrir un fichierqui est à un autre endroit.
00:22:51 :Ça peut se faire avec les répertoires aussi.Un répertoire symbolique,simplement tu rentres dans ce répertoireet puis tu arrives dans un autre endroit de ton disque.
00:22:57 :Donc, c'est que...Un raccourci, en fait.Un raccourci, exactement.Mais je ne vois pas de raison pour laquelle un raccourciou justement ces liens symboliquespourraient être une solution ici.
00:23:11 :Et surtout pas entre le init et le mainparce que le init et le mainsont deux choses très différentes dans un paquet Python.Le init, c'est un fichier qui doit être présentdans tous les paquets de son code.
00:23:26 :Dans tous les paquets.J'en avais fait déjà en Montaurasur ces six paquets et ces modules.Donc, ici, le init peut être vide en général,mais va contenir le code d'initialisationtandis que le main, ici,va être le point d'entrée de son programmequand on crée une architectureavec de multiples paquets et modules.
00:23:48 :Et dans ce cas-là, le point d'entrée,c'est le fichier qui sera lancélorsque j'utilise ma commande Python-m.Et donc, l'objectif des deux fichiers init et mainest complètement différent.
00:24:02 :Donc, je ne vois pas tellement,pour l'instant, je ne visualise pasla solution du lien symbolique.Thierry, j'avais une question également.Oui ?Qu'est-ce la différence au niveau des imports ?
00:24:19 :Par exemple, tu mets point,tu mets le package,tu mets le module, point, le module,ou bien tu mets le package, point, le module.Parce que des fois, tu mets le package,tu mets point, le module, ça marche.
00:24:38 :Des fois, tu mets le point, ça ne marche pas.Des fois, c'est l'inverse qui marche.En fait, tu as deux choses.Il y a les imports relatifset les imports absolus.
00:24:49 :Et ça fonctionne comme ça.J'essaie de partager l'écran.Et puis, est-ce que tu vois en Google Chrome ?Oui, je vois.Donc, si on va sur la double de Python,par exemple, et notamment sur le tuto officiel.
00:25:07 :Donc, si on prend le chapitre 6de ce tuto officiel,qui est justement un chapitrequi discute à fond ces questionsdes modules et des paquets.
00:25:18 :Et si on veut regarder effectivementles paquets ici,là, on a typiquementune architecture multi-paquets.Alors, pour ceux qui ne sont pas là,en Python, en module, c'est en fichier .py.
00:25:32 :Vous l'avez déjà probablement tous compris.Mais ce qu'on appelle un paquet,c'est un répertoire qui va venir grouperplusieurs modules et dans lequelon va trouver obligatoirementce module spécial qui s'appelle init.py.
00:25:47 :Donc, à partir de là,on peut se faire des imports.Alors, tu as deux choix.Tu as la possibilité de faire des imports absolusou des imports relatifs.
00:25:57 :Quand tu as un programme comme celui-là,en fait, toi, tu vas lancer le répertoiredepuis le répertoire parent de Sound,qui est là.Donc, si tu importes quelque chose,tu peux importer de la racine de mon projet,ce sera le répertoire qui contient Sound.
00:26:14 :Et dans ce cas,je peux toujours faire des imports absolus.Donc, quel que soit le moduledans lequel je vais me trouver,à tout moment, je peux toujours faireun import SoundEffectEcho.
00:26:25 :Alors, SoundEffectEcho,ça va m'apporter ce module-là.Donc, si je suis dans Equalizer.py,par exemple, je peux à tout momentfaire un import Sound.Effect.Echopour apporter Echo.
00:26:43 :Mais, tu as également la possibilitéde faire des imports relatifs.Ici.Et c'est là que ces histoires de points interviennent.Si je suis dans Echo,alors, si je suis ici,je vais prendre ça dans un exemple.
00:27:08 :Je vais essayer d'ouvrir VS Code.Voilà, donc en substance, il y avait quoi?Deux niveaux.Je vais réorganiser un petit peu.Alors, je vais Sound.Effect.Filters.
00:27:39 :On va juste faire ça.Sound.Sound.À l'intérieur de Sound.Effect.Et Filters.Dans Filters, on a Echo.Et puis là, on a Equalizer.py.On va juste faire ces deux-là.
00:28:00 :Alors, on va déjà mettre des Units un petit peu partout.Voilà.Et puis, encore ici.Non, je crois qu'il n'y a pas dans le bon.
00:28:21 :C'est dans Filter qu'il n'y a pas.Et puis, ici, on a notre Echo.py.Et puis là, on a notre Equalizer.Donc ici, si je veux apporter quelque chose qui est dans Echo,alors je mets une fonction dans Echoqui s'appelle Echo Function, par exemple.
00:28:46 :Elle ne fait rien.Elle ne fait rien.OK.Et puis, dans Equalizer, je fais une fonction qui s'appelle Equalizer.Function.Techniquement, ça peut être une classe, ça peut être une fonction.
00:29:05 :Surtout, c'est exactement la même chose.Donc ici, si je veux apporter une fonction depuis Echo,j'ai toujours deux possibilités.OK.Soit je prends comme référentiel mon répertoire racine.
00:29:19 :Et donc, je peux importer, par exemple, du coup,Sound.Effect.Echo.ImportEchoFunction.OK.Donc ça, c'est une possibilité de le faire.Et là, je suis dans Equalizer.Puis, je peux importer toujours depuis la racine.
00:29:41 :Mais comme je suis dans Equalizer,je peux également faire un import relatif.Donc, si je fais un import relatif ici,simplement, je me place à l'endroit où j'ai Equalizer.
00:29:57 :Je suis dans Equalizer.Et je me dis que là, je vais revenir d'un étage en arrière,qui va me faire arriver dans Sound.Et ensuite, je vais aller dans Effect.
00:30:07 :Et puis, Echo.Donc, je peux ici remplacer ce Sound par un point.Et puis, ça me fait faire from point point ici.Donc, je reviens un étage en arrière.
00:30:19 :Je suis dans Sound.Effect.Je rentre dans Effect.Echo.EchoFunction.OK.Donc ici, par exemple, si, pour le coup,j'exécute mon EchoFunction.Et puis, qu'on lui fait faire quelque chose à cet EchoFunction,par exemple, un print EchoFunctionCalled, comme ça.
00:30:43 :Et que je lance Equalizer.Pour le coup, on peut regarder que dans ces Equalizer ici,je peux le faire depuis la racine.Python-M.Et ici, Sound.Filter.Equalizer.
00:31:02 :Je ne peux pas mettre de point pi à la fin.Attends, qu'est-ce que...Évidemment, je n'ai pas activé l'environnement virtuel.Dites-moi quoi, pardon.Tyré-M.Sound.Filter.Equalizer.Voilà.
00:31:24 :Et dans ce cas, il a trouvé le module Equalizer.Et puis, avec son import relatif,depuis Equalizer, il a pu remonter d'un étage,revenir dans l'effet,et aller chercher Echo.
00:31:37 :Et puis, la fonction EchoFunction qui était dedans.Donc, soit on fait des imports absolus.Là, ça fonctionne aussi.Tout depuis la racine.Et soit, on fait des imports relatifs.
00:31:50 :Maintenant, si je mets dans Filter, un autre module, par exemple,il s'appelle Vocoder.py, par exemple.Donc, Vocoder.py.Puis, je mets dans une fonction,Vocoder.function.Et puis, on va le faire en print.
00:32:16 :Voilà.Juste en print.OK.Donc, si je suis dans Equalizer,et que, pour le coup, je veux importer une fonction.Et puis, Vocoder, ici, je peux faire la même chose.
00:32:30 :From sound.filter, pour le coup..filter.vocoder.Importer la fonction que je veux.Puis, je peux ensuite l'appeler Vocoder.function.Et puis, j'exécute ces deux fonctions.Mais là, pareil,puisque je suis dans Equalizer,ici, vous voyez, je suis dans Equalizer,je suis dans le même répertoire,dans le même package,ou dans le langage des boutons,
00:33:07 :dans le même paquet que Vocoder.Donc, je n'ai pas besoin de faire tout ce qui m'importe.Je peux remplacer Filter, ici, par un point, simplement.
00:33:16 :Donc, je peux laisser un point devant.Donc, .vocoder.Donc, . signifie, prend dans le même package,donc dans Filter, ici,prend le module Vocoder, etc.
00:33:29 :Et puis, ça fonctionne de la même manière.Si tu ne mets pas le point, ici,donc si tu importes Vocoder,comme la référence, c'est la racine,il ne trouvera pas Vocoder.
00:33:40 :Parce que Vocoder n'est pas la racine,il est dans sound.filter.vocoder.Donc, je suis obligé de mettre le point pour dire,c'est un import relatif depuis Equalizer.
00:33:51 :Et j'importe ce module-là.Donc, quand on crée un programmequi va s'organiser sur plusieurs fichiers,et que chaque fichier est éventuellementorganisé dans un paquet principalet dans des sous-paquets,on va jouer avec ces imports absolus et relatifs.
00:34:09 :Et ici,dans le chapitre 6 du tuto officiel,on a un excellent chapitre,la partie 6.4,qui nous explique le concept de paquets,le concept de ces hiérarchieset les différents imports qu'on peut avoir.
00:34:25 :D'abord, on nous explique les imports absoluset petit à petit, également,les imports relatifs.J'espère que ça répond à ta question.Donc là, tu as effectivement des points.
00:34:40 :Et ici, après,toi, tu peux décider, là, par exemple,j'importe directement la fonction,donc from paquet.paquet.module,le dernier, c'est le module,importe la fonction qui est dans ce module.
00:34:54 :Mais je peux très bien, également,faire from paquet.paquet import le module.Donc là, je peux faire un import écho.Simplement import écho.Et puis là, simplement, je dois...
00:35:08 :Donc là, j'importe le module.Et pour accéder à la fonction,je peux le faire via ce moduleen écrivant écho.échoFunction.Donc j'ai le choix d'importer le module directementet puis, du coup, utiliser ce modulepoint la fonction qui est dedansou d'importer la fonction,ici, point écho,import échoFunction.
00:35:33 :Et puis, du coup, je n'aurai pas besoinde le préfixer.Et ça, ça fonctionne,même si je décide de, du coup,de faire un import relatif.
00:35:44 :Donc ici, on était dans effect.Donc on avait fait ceci,from point point, ici.Donc from point point, import,import écho,import écho, j'importe le module,et écho.
00:36:00 :Et puis dans ce cas-là, je préfixe avec écho.Donc là, quand il y a des points devant,c'est vraiment qu'on est dans un systèmed'import relatif, c'est-à-dire on regardele module equalizer.py
00:36:12 :qui est ouvert ici.Ce module equalizer.py, il est là.Comment est-ce que je veux faire un importrelatif ici ?Le module écho, il est situédans effect.
00:36:22 :Et pour aller dans effect, je remontedans l'étage.Le point point nous fait remonter dans l'étage.Je vais dans effectet ensuite écho.Et puis, parfois,si t'es dans le même répertoirecomme equalizer vos codeurs ici,si je veux importer vos codeurs,je peux faire from point,from point, import vos codeurs.
00:36:48 :Si j'importe le module, puis dans ce cas-là,je dois ici préfixer avec le modulevos codeurs.Voilà.Et quand on a bien compris comment fonctionnentles paquets et les modules, comme ça,et les imports qui y vont avec,c'est parfait parce que du coup,quand on travaille justement sur des frameworks
00:37:10 :qui sont souvent structurésavec de multiples fichierset répertoires, typiquement,si on fait du Django ou même si on fait du Flask,par exemple,pour écrire différents frameworks web,on trouve souvent à devoir organiser son projetsur de multiples répertoires et fichierset de bien comprendre comment fonctionnentces imports absolus et relatifs
00:37:35 :permet d'être à l'aise dans toute situation.J'ai beaucoup de gens autour de moiqui viennent des fois désespérés en posant des questionsparce qu'ils tâtonnent un petit peu.
00:37:45 :Ils essayent des importsjusqu'à ce que ça fonctionne.À mon avis, ça vaut vraiment la peinede passer des fois même une heure, deux heuresou même une demi-journée, pourquoi pas,à bien étudier comment ça fonctionne.
00:38:00 :Par exemple, via le tuto officiel,c'est un sujet qui est beaucoup trop peu discutédans les tutos pour débutants,sauf dans la doc officielle, dans le tuto officiel.
00:38:09 :Et donc, bien prendre le temps de comprendre çaet quand on a compris qu'on peut faire du Django,du Flask, tout ce que tu veux,tu n'as pas de problème.
00:38:18 :Est-ce que si là, j'ai répondu à ta question ?Oui, oui, c'est bon.Mais seulement le dernier là,from point import vocoder,là, dès qu'on met juste le pointet on ne met pas le paquet,on vient directement du module,si on met le point,on quitte directement la racine, c'est ça ?
00:38:41 :Oui, si je mets le point,moi je suis là dans Equalizer,from point, et puis j'importe le module.Si je veux importer la fonction qui est dedans,je mettrais point vocoder,vocoder import la fonction,mais toi, en fait,j'ai toujours le choix d'importer la fonctionou bien le module dans lequel cette fonction se trouve.
00:39:06 :Donc là,comme le module se trouve directementdans le même répertoire,il va directement,quand j'ai mis le point,je n'ai plus rien,j'ai juste le module après.
00:39:18 :Et donc ça, c'est parfaitement valide.Si j'avais quelque chose,la racine d'ensemble,admettons que j'ajoute un trucqui s'appelle config.py à la racine,enfin dans sound,ici config,et puis que je veux importer config,et que je suis dans Equalizer,par exemple,alors bien sûr,je peux tout faire plus la racine,
00:39:44 :donc je peux fairefrom sound import config,par exemple,et ça, ça va m'importer ce module config.Ou alors,from point point,ici,parce que je suis dans Equalizer,si on regarde config,il est dans le répertoire sound,donc je dois remonter d'un étage,c'est comme quand tu es dans le shell,
00:40:15 :comme ça,et que tu fais un cd revenir en arrière.Donc là, c'est pareil,ici, from point point,il porte config,et ça, ça fonctionne aussi.
00:40:27 :Donc soit ici,en mettant print,dans config,et que j'exécute ça,on voit qu'il a bien exécuté config,et il l'a exécuté ici,en faisant,depuis ce répertoire,ici,remonter d'un étage,et puis aller chercher celui-là.
00:40:54 :Donc,c'est toujours assez amusant,enfin, amusant,de s'amuser,de jouer un petit peu avec les imports.C'est sûr qu'on a bien compris.Ouais, ouais.D'accord.
00:41:05 :Le truc,c'est de se faire une petite arborescence,et puis tu essayes de faire des imports,et techniquement,si tu as bien compris ce que c'est fait,tous les imports peuvent être faits de manière,enfin,de quatre manières, en fait,d'une manière absolue,et d'une manière relative,soit en apportant le module,
00:41:29 :soit en apportant la fonction,la classe qui est dedans directement,et donc, du coup,tu peux vraiment varier les manières d'importer.Une fois que tu as bien compris,tu ne devrais jamais avoir d'erreur de démarrage.
00:41:42 :Si tu as des erreurs,c'est qu'il y a quelque choseque tu n'as pas bien pigé.Et dans ce cas,n'hésite pas à poser des questions.
00:41:49 :D'accord, ça marche.Ça ne marche pas pour moi.Merci beaucoup.Merci, Thierry.Je t'en prie.Donc voilà,malheureusement,on a utilisé pas mal de temps.
00:42:01 :Peut-être qu'on prend une dernière question,si vous avez encore une dernière question.C'est bien,tu m'avais dit,c'est « à ce qu'il est l'heure »pour le « ce qu'il est l'heure »de Fahic et Britton.
00:42:14 :« à ce qu'il est l'heure ».Celui-là.Attends,je vais essayer de retrouver le partage.« à ce qu'il est l'heure ».« à » et « ce qu'il est l'heure »,par exemple.
00:42:31 :OK.« à ce qu'il est l'heure ».D'accord.D'accord, merci.Merci beaucoup, Thierry.Je t'en prie.Avec mes excuses,je me suis trompé de bouton.
00:42:54 :Vous êtes toujours là ?Ah oui, parfait.Alors,je vais juste regardersi c'est toujours en train d'enregistrer.Allez, c'est bon.Voilà.Est-ce qu'il y a une dernière question ?
00:43:13 :Donc, de toute manière,on se voit à prioriplus ou moins toutes les semainespour une demi-heure,trois quarts d'heure,comme ça.Normalement,c'est prévu le mercredi.
00:43:28 :Je suis en train de regardersi ma femme travaille un autre jour.Donc,peut-être que je vais déplacer au mardi.Je regarde ce qu'il y acomme autre programmede webinairedans la communauté Discordde String.
Aucune occurrence trouvée pour « ».
00:00:00
Introduction et format de la session
00:01:22
Débutant en POO : demande de conseils
00:02:21
Discussion de projet : Envoi de requêtes et emails
00:05:45
Exécution de scripts en Python et automatisation
00:14:34
PyCharm vs VS Code : Choisir son éditeur
00:18:23
L'utilisation de l'IA dans l'apprentissage
00:24:54
Gestion des imports en Python
00:41:56
paquets
00:41:57
Clôture et futures sessions