{"id":2201,"date":"2020-04-14T10:44:15","date_gmt":"2020-04-14T08:44:15","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=2201"},"modified":"2020-05-10T15:57:36","modified_gmt":"2020-05-10T13:57:36","slug":"les-modules-les-packages","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=2201","title":{"rendered":"Les modules \u2013 Les packages"},"content":{"rendered":"\n<h6>&nbsp;<\/h6>\n<h6><span style=\"color: #999999;\">(<em>Cliquez pour afficher la version PDF)<\/em><\/span><\/h6>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/scriptspython4.pdf\">Les modules &#8211; Les packages<\/a><a href=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/scriptspython4.pdf\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>&nbsp;<\/p>\n<p>Nous avons vu que dans un script Python (fichier avec une extension <strong>.py<\/strong>), il \u00e9tait possible de d\u00e9finir des fonctions r\u00e9utilisables afin d\u2019\u00e9viter les r\u00e9p\u00e9titions de code.<\/p>\n<p>Jusqu\u2019\u00e0 pr\u00e9sent, dans les scripts que nous avons \u00e9tudi\u00e9s, les fonctions \u00e9taient toujours d\u00e9finies au d\u00e9but du script.<\/p>\n<p>Il est cependant possible d\u2019effectuer la d\u00e9finition des fonctions dans un fichier s\u00e9par\u00e9 pour ensuite utiliser les fonctions dans un script principal.<\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"color: #0000ff;\"><strong><a id=\"mod1\"><\/a>. <u>Les modules<\/u><\/strong><\/span><\/h4>\n<p>Un programme Python est donc g\u00e9n\u00e9ralement compos\u00e9 de plusieurs fichiers sources avec une extension .<strong>py<\/strong>, appel\u00e9s <strong>modules<\/strong> ind\u00e9pendants les uns des autres et pouvant \u00eatre r\u00e9utilis\u00e9s dans d&rsquo;autres programmes.<\/p>\n<p>Un module rassemble les fonctions utilis\u00e9es par le programme principal dans un m\u00eame fichier situ\u00e9 dans le r\u00e9pertoire d\u2019ex\u00e9cution du programme (pour les modules personnels).<\/p>\n<p>Pour pouvoir utiliser les fonctions du module, le programme principal doit les importer.<\/p>\n<p>Deux syntaxes sont possibles pour l\u2019importation d\u2019un module :<\/p>\n<p>. la commande <strong>import nom_module<\/strong> importe la totalit\u00e9 des objets du module.<\/p>\n<p>Exemple&nbsp;: <strong>import math<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/module3.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"105\" class=\"wp-image-2215 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod1.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod1.png 685w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod1-300x46.png 300w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p>Le module peut \u00eatre import\u00e9 sous un autre nom, un alias. On utilise alors cet alias pour appeler les fonctions&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/module2.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"122\" class=\"wp-image-2216 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod2.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod2.png 685w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod2-300x53.png 300w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/a><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<p>. la commande <strong>from nom_module import obj1, obj2<\/strong>&#8230; n&rsquo;importe que les objets <strong>obj1<\/strong>, <strong>obj2<\/strong>&#8230; du module:<\/p>\n<p>Exemple:&nbsp; <strong>from math import pi, sin, log<\/strong><\/p>\n<p>Dans cet exemple, seules les fonctions <strong>cos<\/strong> et <strong>pi<\/strong> du module math sont import\u00e9es.<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/module4.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"113\" class=\"wp-image-2217 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod3.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod3.png 685w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod3-300x49.png 300w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/a><\/figure>\n<\/div>\n<p>Ou toutes les fonctions du module :<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/module.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"673\" height=\"111\" class=\"wp-image-2218 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod4.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod4.png 673w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod4-300x49.png 300w\" sizes=\"auto, (max-width: 673px) 100vw, 673px\" \/><\/a><\/figure>\n<\/div>\n<p>(Le caract\u00e8re <strong>\u2018*\u2018<\/strong> permet d\u2019importer toutes les fonctions du module.)<\/p>\n\n\n\n<p><u><br>Exemple<\/u>&nbsp;:<\/p>\n<p>Reprenons le programme d\u2019affichage de la table de multiplication en cr\u00e9ant un module appel\u00e9 <strong>table.py<\/strong> contenant les fonctions du programme.<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/table.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"400\" class=\"wp-image-2222 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod5.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod5.png 685w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod5-300x175.png 300w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/a><\/figure>\n<\/div>\n<p>Le programme principal importe toutes les fonctions&nbsp;du module table et les utilise&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/table_main.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"686\" height=\"179\" class=\"wp-image-2238 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod6.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod6.png 686w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod6-300x78.png 300w\" sizes=\"auto, (max-width: 686px) 100vw, 686px\" \/><\/a><\/figure>\n<\/div>\n<p><u>R\u00e9sultat dans la fen\u00eatre Python Shell<\/u>&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"193\" class=\"wp-image-2239 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod7.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod7.png 684w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonmod7-300x85.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<h4><span style=\"color: #0000ff;\"><strong><a id=\"mod2\"><\/a>. <u>Les packages<\/u><\/strong><\/span><\/h4>\n<p>Quand on a un grand nombre de modules, il est int\u00e9ressant de les organiser dans des dossiers. Un dossier qui rassemble des modules est appel\u00e9 un <strong>package<\/strong> (paquets en fran\u00e7ais). Ce dossier doit contenir un fichier nomm\u00e9 <strong>_init_.py<\/strong> vide ou d\u00e9crivant l&rsquo;arborescence du package. Le fichier <strong>_init_.py<\/strong> m\u00eame vide est essentiel pour que Python consid\u00e8re les dossiers le contenant comme des paquets.<\/p>\n<p><u>Exemple<\/u>&nbsp;:<\/p>\n<p>Toujours avec programme d\u2019affichage de la table de multiplication, nous allons cr\u00e9er un module <strong>table.py<\/strong> contenant la fonction d\u2019affichage de la table&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/fonctions\/table.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"172\" class=\"wp-image-2243 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack1.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack1.png 684w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack1-300x75.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/a><\/figure>\n<\/div>\n<p>Et un module <strong>saisie.py <\/strong>contenant la fonction de saisie d\u2019un nombre&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/fonctions\/saisie.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"254\" class=\"wp-image-2244 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack2.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack2.png 684w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack2-300x111.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/a><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<p>Ces deux modules ainsi que le fichier <strong>_init_.py<\/strong> sont situ\u00e9s dans un dossier nomm\u00e9 <strong>fonctions<\/strong>. Dans ce cas simple, le fichier <strong>_init_.py <\/strong>peut \u00eatre vide, mais il peut \u00e9galement d\u00e9crire l\u2019arborescence du dossier <strong>fonctions<\/strong>&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/fonctions\/_init_.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"126\" class=\"wp-image-2246 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack3.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack3.png 684w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack3-300x55.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/a><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<p>Le dossier <strong>fonctions<\/strong> est situ\u00e9 dans le r\u00e9pertoire d\u2019ex\u00e9cution du programme principal&nbsp;qui va importer la fonction <strong>table<\/strong> du module <strong>table.py<\/strong> et la fonction <strong>saisie<\/strong> du module <strong>saisie.py<\/strong> :<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/table_main2.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"233\" class=\"wp-image-2247 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack4.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack4.png 685w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack4-300x102.png 300w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/a><\/figure>\n<\/div>\n<p><u>R\u00e9sultat dans la fen\u00eatre Python Shell<\/u>&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"146\" class=\"wp-image-2248 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack5.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack5.png 684w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack5-300x64.png 300w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<h4><span style=\"color: #0000ff;\"><strong><br><a id=\"mod3\"><\/a>. <u>La biblioth\u00e8que standard de &nbsp;Python<br><\/u><\/strong><\/span><\/h4>\n<p>Par d\u00e9faut, Python dispose de nombreux packages et modules int\u00e9gr\u00e9s \u00e0 sa biblioth\u00e8que standard. On peut citer&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\">. <strong>random<\/strong> : fonctions permettant de travailler avec des valeurs al\u00e9atoires<\/p>\n<p style=\"padding-left: 40px;\">. <strong>math<\/strong> : toutes les fonctions utiles pour les op\u00e9rations math\u00e9matiques (cosinus,sinus,exp,etc.)<\/p>\n<p style=\"padding-left: 40px;\">. <strong>sys<\/strong> : fonctions syst\u00e8mes<\/p>\n<p style=\"padding-left: 40px;\">. <strong>os<\/strong> : fonctions permettant d&rsquo;interagir avec le syst\u00e8me d&rsquo;exploitation<\/p>\n<p style=\"padding-left: 40px;\">. <strong>time<\/strong> : fonctions permettant de travailler avec le temps<\/p>\n<p style=\"padding-left: 40px;\">. <strong>tkinter<\/strong>&nbsp;: interface graphique<\/p>\n<p style=\"padding-left: 40px;\">\u2026<\/p>\n\n\n\n<p><br>Par exemple, le module <strong>pickle <\/strong>permet de sauvegarder dans un fichier au format binaire, n&rsquo;importe quel objet Python (une liste, un dictionnaire, un tuple, etc\u2026). C\u2019est une alternative int\u00e9ressante \u00e0 la sauvegarde des donn\u00e9es dans un fichier texte.<\/p>\n<p>Le script ci-dessous enregistre une liste appel\u00e9e <strong>list_to_save<\/strong> dans un fichier binaire nomm\u00e9 <strong>file_pickle<\/strong>, puis ouvre le fichier en mode lecture normal et l\u2019affiche dans la fen\u00eatre Python Shell pour montrer qu\u2019il s\u2019agit bien d\u2019un fichier binaire, et enfin charge le fichier en mode lecture binaire et l\u2019affiche dans la fen\u00eatre Python Shell&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/pickle.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"837\" height=\"525\" class=\"wp-image-2252 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack6.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack6.png 837w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack6-300x188.png 300w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack6-768x482.png 768w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p><u>D\u00e9roulement du programme<\/u><\/p>\n<p>&#8211; Sauvegarde au format binaire :<\/p>\n<p>Le fichier <strong>file_pickle<\/strong> est d\u2019abord ouvert ou cr\u00e9\u00e9 en mode \u00e9criture binaire <strong>(\u2018wb\u2019<\/strong>). Avec la m\u00e9thode <strong>Pickler<\/strong> du module <strong>pickle, <\/strong>on cr\u00e9e l\u2019objet <strong>list_pickler<\/strong> rattach\u00e9 au fichier binaire.<\/p>\n<p>La m\u00e9thode <strong>dump<\/strong> appliqu\u00e9e \u00e0 cet objet permet d\u2019enregistrer au format binaire la liste <strong>list_to_save<\/strong> dans le fichier <strong>file_pickle<\/strong>.<br><br><\/p>\n<p>&#8211; Affichage du fichier binaire brut&nbsp;:<\/p>\n<p>Le fichier est ouvert en mode lecture normal <strong>(\u2018r\u2019<\/strong>) et affich\u00e9 dans la fen\u00eatre Python Shell.<br><br><\/p>\n<p>&#8211; Chargement du fichier binaire :<\/p>\n<p>Le fichier <strong>file_pickle<\/strong> est d\u2019abord ouvert en mode lecture binaire <strong>(\u2018rb\u2019<\/strong>). Avec la m\u00e9thode <strong>Unpickler<\/strong> du module <strong>pickle, <\/strong>on cr\u00e9e l\u2019objet <strong>list_depickler<\/strong> rattach\u00e9 au fichier binaire ouvert.<\/p>\n<p>La m\u00e9thode <strong>load<\/strong> appliqu\u00e9e \u00e0 cet objet permet d\u2019affecter la liste sauvegard\u00e9e en binaire \u00e0 la liste <strong>list_to_read<\/strong> qui est ensuite affich\u00e9e.<br><br><\/p>\n<p><u>R\u00e9sultats dans la fen\u00eatre Python Shell<\/u><\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"836\" height=\"81\" class=\"wp-image-2253 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack7.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack7.png 836w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack7-300x29.png 300w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack7-768x74.png 768w\" sizes=\"auto, (max-width: 836px) 100vw, 836px\" \/><\/figure>\n<\/div>\n\n\n\n<p><u><br>Remarque<\/u>&nbsp;:<\/p>\n<p>Pour la m\u00e9thode <strong>dump<\/strong>, le fichier doit toujours \u00eatre ouvert en mode &lsquo;<strong>wb<\/strong>&lsquo; afin d&rsquo;\u00e9craser le contenu pr\u00e9c\u00e9dent si le fichier existe d\u00e9j\u00e0.<\/p>\n<p>&nbsp;<\/p>\n<p><u>Exemple d\u2019application<\/u>&nbsp;:<\/p>\n<p>Nous allons appliquer cette m\u00e9thode de sauvegarde \u00e0 notre programme de gestion d\u2019inventaire.<\/p>\n<p>Dans le script suivant, des fonctions d\u2019ouverture et de sauvegarde au format binaire d\u2019un dictionnaire nomm\u00e9 <strong>inventaire <\/strong>sont d\u00e9finies et utilis\u00e9es pour afficher l\u2019inventaire et enregistrer les modifications qui lui sont apport\u00e9es (ajout ou suppression de lignes).<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/python\/modules\/invent-pickle.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2258 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack8-552x1024.png\" alt=\"\" width=\"709\" height=\"1315\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack8-552x1024.png 552w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack8-162x300.png 162w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack8-768x1424.png 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack8-828x1536.png 828w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack8.png 836w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/a><\/figure>\n<\/div>\n<p><u>R\u00e9sultats dans la fen\u00eatre Python Shell<\/u>&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"833\" height=\"564\" class=\"wp-image-2260 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack9.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack9.png 833w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack9-300x203.png 300w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack9-768x520.png 768w\" sizes=\"auto, (max-width: 833px) 100vw, 833px\" \/><\/figure>\n<\/div>\n<p>&nbsp;<\/p>\n\n\n\n<h4><span style=\"color: #0000ff;\"><strong><a id=\"mod4\"><\/a>. <u>Installation de biblioth\u00e8ques (package) Python<\/u><\/strong><\/span><\/h4>\n<p>Outre les modules int\u00e9gr\u00e9s \u00e0 la distribution standard de Python, on trouve des biblioth\u00e8ques dans tous les domaines.<\/p>\n<p>Le site <a href=\"https:\/\/pypi.org\/\">pypi.python.org\/pypi<\/a> (The Python Package Index) recense des milliers de modules et de packages !<\/p>\n<p>Nous allons nous int\u00e9resser plus particuli\u00e8rement aux biblioth\u00e8ques <strong>numpy<\/strong> et <strong>matplotlib<\/strong>.<\/p>\n<p>En effet, dans le domaine scientifique, la manipulation des donn\u00e9es \u00e0 travers des tableaux et le trac\u00e9 de courbes caract\u00e9ristiques est courante, et les biblioth\u00e8ques <strong>numpy<\/strong> et <strong>matplotlib<\/strong> sont tr\u00e8s utiles pour l\u2019exploitation de ces donn\u00e9es.<\/p>\n<p><strong>numpy<\/strong> et <strong>matplotlib<\/strong> ne font pas partie des biblioth\u00e8ques standard de Python. Il faut donc ajouter ces biblioth\u00e8ques \u00e0 la distribution de Python.<\/p>\n<p>A noter, que l\u2019installation de <strong>matplotlib<\/strong> installe \u00e9galement la biblioth\u00e8que de calcul <strong>numpy.<\/strong><\/p>\n<p>Pour ajouter une biblioth\u00e8que \u00e0 Python sous Windows, le plus simple est d\u2019ouvrir une console de commandes (taper <strong>cmd<\/strong> dans la zone de recherche de Windows) et de se placer dans le dossier d\u2019installation de Python&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"677\" height=\"138\" class=\"wp-image-2270 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack10.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack10.png 677w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/pythonpack10-300x61.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/figure>\n<\/div>\n<p>(A adaptez bien-s\u00fbr \u00e0 votre chemin d&rsquo;installation, login et n\u00b0 de version Python\u2026)<\/p>\n\n\n\n<p>Et de taper la commande suivante qui va installer la derni\u00e8re version d\u2019un package et de ses d\u00e9pendances depuis le&nbsp;<em>Python Package Index<\/em>&nbsp;(<strong>pip<\/strong>) qui est l\u2019outil d\u2019installation de pr\u00e9dilection des biblioth\u00e8ques (\u00e0 partir de Python 3.4, il est inclus par d\u00e9faut avec l\u2019installateur de Python) :<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table style=\"width: 100%; height: 10px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 10px; padding-left: 40px;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\"><strong>python -m pip install package<\/strong><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p>Si un package est d\u00e9j\u00e0 install\u00e9, l\u2019installer \u00e0 nouveau n\u2019aura aucun effet. La mise \u00e0 jour de package existants doit \u00eatre demand\u00e9e explicitement :<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table style=\"width: 100%; height: 21px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 21px; padding-left: 40px;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\"><strong>python -m pip install &#8211;upgrade package<\/strong><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p>Donc, pour installer la biblioth\u00e8que <strong>matplotlib<\/strong>, il suffit de taper la ligne de commande suivante&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table style=\"width: 100%; height: 39px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 21px; padding-left: 40px;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\"><strong>python -m pip install matplotlib<\/strong><\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p>Et l&rsquo;outil <strong>pip<\/strong> va t\u00e9l\u00e9charger sur le site de d\u00e9p\u00f4ts la librairie demand\u00e9e ainsi que les d\u00e9pendances n\u00e9cessaires dont <strong>numpy<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n\n\n<div  class=\"grids-section grids-is-stretch\" style=\"--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:2;--_gs-rows:1\"><div class=\"grids-s-w_i\">\n<div class=\"grids-area\" style=\"--_ga-column:1\/2;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2147\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/moins.jpg\" alt=\"\" class=\"wp-image-107\"\/><\/a><\/figure><\/div>\n\n<\/div>\n\n<div class=\"grids-area\" style=\"--_ga-column:2\/3;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2276\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/plus.jpg\" alt=\"\" class=\"wp-image-106\"\/><\/a><\/figure><\/div>\n\n<\/div>\n<\/div><\/div>\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; (Cliquez pour afficher la version PDF) &nbsp; Nous avons vu que dans un script Python (fichier avec une extension .py), il \u00e9tait possible de d\u00e9finir des fonctions r\u00e9utilisables afin d\u2019\u00e9viter les r\u00e9p\u00e9titions de code. Jusqu\u2019\u00e0 pr\u00e9sent, dans les scripts que nous avons \u00e9tudi\u00e9s, les fonctions \u00e9taient toujours d\u00e9finies au d\u00e9but du script. Il est [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2201","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2201"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2201\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}