Différences entre versions de « FEATHER-CHARGER-MODULE-IMPORT »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(26 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{FEATHER-CHARGER-MODULE-NAV}}
 
{{FEATHER-CHARGER-MODULE-NAV}}
  
{{traduction}}
 
 
== Importer un fichier de code ==
 
== Importer un fichier de code ==
Just like with regular Python you can import and use code from files in your own MicroPython scripts. This is great for breaking a large or complex script into smaller pieces, or for sharing and reusing code with multiple projects.
+
Comme pour une version standard de Python, vous pouvez importer et exécuter du code provenant de fichiers python dans votre script MicroPython. Cette approche est idéal pour décomposer un long script ou script complexe en des morceaux de codes plus petits. Cela permet de réutiliser ou partager du code entre plusieurs project. Cela facilite également le processus de maintenance.
  
If you aren't familiar with Python's module support be sure to [https://docs.python.org/3/tutorial/modules.html read the official documentation first]. Python allows you to put code in a .py file and import it from other scripts in the same directory. You can even get more advanced and create packages which include multiple .py files and expose them in different ways. Most third-party Python libraries are available as packages which you install and import in your own scripts.
+
Si vous n'avez pas l'habitude des modules Python alors vous devriez prendre connaissance [https://docs.python.org/3/tutorial/modules.html de la documentation officielle] (''Python.org, Anglais''). Python vous permet de placer du codans dans un fichier .py puis de l'importer depuis un autre script se trouvant dans le même répertoire. Vous pouvez même opter pour une approche plus avancée en créant un paquet (''package'' en anglais) contenant plusieurs fichiers .py que vous pourrez exposer de différentes façons. La plupart des bibliothèques Python tierces sont disponibles sous forme de paquet que vous pouvez installer et importer dans vos propres scripts.
  
We'll start by looking at how to import code from a single '''.py''' file in your MicroPython script. First make sure you have a board running MicroPython and are familiar with copying files to and from the board.
+
Nous allons commencer par voir comment importer du code depuis un simple fichier '''.py''' dans votre script MicroPython. Assurez-vous d'avoir une carte fonctionnant sous MicroPython et de vous être familiarisé avec les manipulations de fichier sur votre carte.
  
Next start by creating a simple Python file with a few functions on your computer. In a text editor create '''test.py''' and fill it with the following code:
+
Ensuite, nous allons commencer par créer un petit fichier Python sur notre ordinateur, il contiendra quelques fonctions. Créez le fichier '''test.py''' avec un éditeur de texte et copiez y le code suivant:
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 19 : Ligne 18 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Try using the code on your computer first with the [http://www.python.org/ desktop version of Python] before trying it in MicroPython. In a terminal navigate to the same directory as the test.py file (this is very important, '''you must be in the same directory as test.py'''!) and run the '''python3''' command (or '''python''' if using Python 2.x). At the Python REPL enter the following commands:
+
La fonction {{fname|add()}} permet de faire l'addition de deux valeurs tandis que la fonction {{fname|substract()}} effectue une soustraction.
 +
 
 +
Testez d'abord ce code depuis votre ordinateur avec [http://www.python.org/ la version PC de Python] avant de l'essayer sur MicroPython. Dans un termminal, naviguez dans le répertoire contenant le fichier test.py (ceci est très important, '''vous devez vous trouver dans le même répertoire que test.py'''!) puis exécutez la commande '''python3''' (ou '''python''' si vous utilisez Python 2.x).  
 +
 
 +
Saisissez les commandes suivantes sur l'invite de commande Python (ou invite REPL... lorsque vous testerez sous MicroPython):
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 26 : Ligne 29 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
You should see the add function called and the result of 1 + 1 returned. If you see an {{fname|ImportError}} that the test module can't be found make sure you're running Python from the same directory as test.py is located.
+
Vous devriez voir l'appel a la fonction {{fname|add()}} (ajouter) et le resultat 1 + 1 retourné. Si vous voyez un {{fname|ImportError}} indiquant le module test ne peut pas être chargé alors assurez vous que vous exécutez Python depuis le même répertoire que votre fichier test.py.
  
Try calling the subtract function just like the add function was called. Remember you need to add the module name in front of the function when you call it!
+
Essayez ensuite d'appeler la fonction {{fname|subtract()}} (soustraction) comme nous l'avons fait pour l'addition. Rappelez vous bien d'ajouter le nom du module devant le nom de la fonction que vous voulez appeler!
  
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-10.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-10.png}}
  
Now that you see how a simple .py file import works on your computer try doing the same with MicroPython. Copy the test.py file to the root of your board's filesystem. For example if you're using a tool like ampy to copy files you would run something like:
+
Maintenant que vous savez comment importer un simple fichier .py sur votre ordinateur, nous allons faire la même chise avec notre carte MicroPython. Copiez le fichier test.py dans le répertoire racine (dit ''root'' en anglais) de votre système de fichier. Par exemple, si vous utilisez un outil tel que {{fname|ampy}} pour copier les fichiers que vous désirez exécuter alors vous devriez utiliser une syntaxe similaire à celle-ci:
  
 
  <nowiki>ampy --port /board/serial/port put test.py</nowiki>
 
  <nowiki>ampy --port /board/serial/port put test.py</nowiki>
  
Then connect to the board's REPL and run the same Python code to import and use the module:
+
Connectez vous ensuite en REPL sur la carte et exécutez les mêmes instructions Python (que celles ci-dessus) pour importer et utiliser le module:
 
 
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 47 : Ligne 49 :
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-11.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-11.png}}
  
You should see the functions run just like they did on your computer! If you see an ImportError double check you copied the test.py file to the root of the board's filesystem and try again.
+
Vous devriez voir les fonctions fonctionner exactement comme elles le font dans le programme Python de votre ordinateur! Si vous voyez un message d'erreur {{fname|ImportError}} alors vérifiez l'opération de copie du fichier {{fname|test.py}} sur la racine du système de fichier de votre carte puis essayez encore.
  
Importing and using code from a .py file in MicroPython is as easy as copying the file to the board and importing to use as above. Remember the file needs to be in the same location as the script which is importing and using it.  In most cases your scripts will be in the root of the board's filesystem so that's usually where you want to place .py files which will be imported.
+
Importer et utiliser du code depuis un fichier .py avec MicroPython est aussi facile que l'opération que nous venons d'apprendre. Il faut copier le fichier sur la carte puis l'importer avec l'instruction {{fname|import}} comme vu ci-dessus.  
  
You can import and call more than just functions in your scripts too. Anything inside test.py like classes, functions, global variables, etc. will be availabe to your script after the import command runs. In fact you can see exactly what is in the module with the '''dir''' command, for example in the REPL run:
+
Souvenez vous que le fichier .py a importer {{underline|doit}} se trouver dans le répertoire que le script qui l'importe et l'utilise. Dans la plupart des cas vos scripts se trouverons dans la racine du système de fichier, ce sera donc l'emplacement où vous placerez naturellement les fichier .py que vous voudrez importer.
 +
 
 +
Grâce à l'importation, vous pouvez faire bien plus qu'importer et appeler des fonctions dans vos scripts. Tout ce qui se trouve dans le fichier test.py comme les classes, les fonctions, les variables globales, etc seront disponibles votre script dès la commande d'importation {{fname|import}} exécutée.  
 +
 
 +
{{underline|Trucs & astuces:}} il est possible de voir exactement ce qui se trouve dans un module en utilisant l'instruction {{fname|dir()}}, voyez l'exemple suivant qui peut être exécuté dans REPL:
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 60 : Ligne 66 :
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-12.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-12.png}}
  
You should see a list of everything that was imported from the module, including the '''add''' and subtract functions (the '''__name__''' variable is something Python adds to let the module know what its name is).
+
Vous devriez voir une liste de tout ce qui à été importé dans le module, y compris les fonctions {{fname|add()}} et {{fname|subtract()}} (la variable '''__name__''' est ajoutée par Python pour que le module puisse connaître son propre nom).
  
 
== Les paquets (Packages) ==
 
== Les paquets (Packages) ==
Sometimes your code can get so complex that putting it into a single file doesn't make sense.  In these cases you can break code into multiple files and create a Python package that puts all the code together into what looks like a simple module your scripts can import.  MicroPython supports the concept of Python packages just like normal Python so you can better structure complex scripts.
+
Il arrive parfois que votre code devienne tellement complexe que le placer dans un unique fichier à importer n'a pas, non plus, beaucoup de sens!
  
First be sure to read the [https://docs.python.org/3/tutorial/modules.html#packages official documentation on Python packages]. Packages in MicroPython for the most part work just the same as in Python.
+
Dans ce cas, vous pouvez scinder votre code en plusieurs fichiers et créer ce que l'on appelle un "''Package''" Python ("''package''" est un terme anglais que l'on traduit généralement par "''paquet''"). Les Package/Paquet rassemble tout le code ensemble en quelque-chose qui à un simple module que vos scripts peuvent importer. MicroPython supporte le concept de Package/Paquet Python comme le language Python standardiser. L'utilisation des Paquets/Packages permet d'offrir une meilleure structure à vos scripts et projets vraiment complexes.
  
Now create a Python package on your computer by creating a directory called '''test'''. Inside that directory create a file called '''add.py''' and place inside it the add function code:
+
Avant tout, assurez-vous d'avoir pris connaissance de la [https://docs.python.org/3/tutorial/modules.html#packages documentation officielle des packages/paquets Python] (''python.ord, anglais''). les Paquets/Packages en MicroPython fonctionne, pour la plupart des cas, de la même façon qu'en Python.
 +
 
 +
Nous allons maintenant créer un paquet/package Python sur notre ordinateur. Créez un répertoire appelé '''test''' et ajoutez le fichier '''add.py''' à l'intérieur de celui-ci.  
 +
 
 +
Dans le fichier '''add.py''', ajoutez la fonction {{fname|add}} tel que déclarée ci-dessous:
  
 
  <syntaxhighlight lang="python">
 
  <syntaxhighlight lang="python">
Ligne 74 : Ligne 84 :
 
  </syntaxhighlight>
 
  </syntaxhighlight>
  
Create a file '''subtract.py''' in the same location and place in it the subtract function code:
+
Créez aussi un fichier '''subtract.py''' dans le même emplacement et ajouter la fonction {{fname|substract}} tel que déclarée ci-dessous:
  
 
  <syntaxhighlight lang="python">
 
  <syntaxhighlight lang="python">
Ligne 81 : Ligne 91 :
 
  </syntaxhighlight>
 
  </syntaxhighlight>
 
   
 
   
Finally create a file called '''__init__.py''' in the same location and enter the following code to import and expose the functions from the files above:
+
Pour finir, créez un fichiez appelé '''__init__.py''' dans le même emplacement. Saisissez y le code suivant pour importer et exposer les fonctions des deux fichiers add.py et substract.py précédemment crées:
  
 
  <syntaxhighlight lang="python">
 
  <syntaxhighlight lang="python">
Ligne 88 : Ligne 98 :
 
  </syntaxhighlight>
 
  </syntaxhighlight>
  
'''Be sure to call this file exactly __init__.py'''!  Python looks for this file name to know that it found a package.  If you don't have this file or if it's not named correctly then Python will fail to import the package!
+
'''Soyez attentif, le fichier doit exactement s'appeler __init__.py'''!  Python recherche ce nom de fichier pour savoir s'il s'agit d'un paquet/package. Si vous n'avez pas ce fichier ou s'il nest pas nommé correctement alors Python n'importera pas le paquet!
 +
 
 +
Le code à l'intérieur du fichier '''__init__.py''' est exécuté lorsque le paquet/package est importé par un script. Vous pouvez voir dans le code de __init__.py qu'il importe la fonction {{fname|add}} depuis le fichier '''add.py''' (contenu dans le paquet/package) ainsi que la fonction {{fname|substract}} contenu dans le fichier '''subtract.py'''.
 +
 
 +
Notez que l'instruction d'importation référence le fichier '''add.py''' en utilisant un "''nom d'importation absolu''". Par exemple, le fonction add est importée depuis '''test.add'''Le 'test.' est le nom du paquet/package, par exemple: le nom du répertoire du paquet/package. Le 'add' derrière le 'test.add' est le nom du fichier python (add.py) où l'interpréteur Python trouvera la fonction à importer.
  
The code inside '''__init__.py''' runs when the package is imported in a script.  You can see this code imports the add function from the '''add.py''' script in the package, and the subtract function from the '''subtract.py''' script.
+
Suivant l'instruction '''{{fname|1=from <font color="teal">test</font>.<font color="purple">add</font> import <font color="Orange">add</font> }}''', nous importons donc une fonction '''<font color="Orange">add</font>''' depuis le fichier '''<font color="purple">add.py</font>''' se trouvant dans le répertoire "'''<font color="teal">test</font>'''" (comme stipulé par '''<font color="teal">test</font>.<font color="purple">add</font>''').  
  
Notice the import statements refer to '''add.py''' by its full 'absolute import' name of '''test.add'''.  The test. in front of add is the package name, i.e. the name of the package directory.  You can't run a command like "'''from add import add'''" in the __init__.py since Python would get confused if it should load an add.py from inside the module or from elsewhereUsing the full name '''test.add''' tells Python to use the '''add.py''' module inside the '''test''' package directory.
+
Dans le script {{fname|__init__.py}}, vous {{underline|ne pourrez pas exécuter une commande}} tel que "'''from add import add'''" étant donné que cette instruction est totalement confuse pour Python. En effet, il essayera de charger la fonction {{fname|add}} depuis le module add.py (le fichier add.py) se trouvant dans le même répertoire où est exécuté le script principal (''comme expliqué en début de cette section'')En utilisant le nom complet '''test.add''' nous indiquons à Python d'utiliser le fichier/module '''add.py''' à l'intérieur du répertoire paquet/package '''test''' .
  
Double check you have a test package structure that looks like the following:
+
Vérifiez que le paquet/package test soit confirme avec la structure suivant:
  
* '''test''' directory
+
* Répertoire '''test'''
** '''__init__.py''' file which imports the add and subtract functions
+
** Le fichier '''__init__.py''' qui importe les fonctions {{fname|add()}} et {{fname|substract()}}
** '''add.py''' which exposes the add function
+
** Le fichier '''add.py''' qui expose la fonction {{fname|add()}}
** '''subtract.py''' which exposes the subtract function
+
** Le fichier '''subtract.py''' qui expose la fonction {{fname|subtract()}}
  
Now try importing and using the package with desktop Python. In a terminal navigate to the '''parent of the test package directory''' (i.e. one folder above it). Importing and using a package is just like importing a .py file however Python treats the entire test directory as the package itself. This means you need to run Python from above the test directory so Python can find the package.
+
Essayez maintenant d'importer et d'utiliser le paquet/package avec la version PC de Python. Utilisez un terminal et naviguez jusqu'au répertoire '''parent du répertoire "test" contenant notre paquet/package''' (ex. le répertoire juste avant le répertoire "test"). Importer et utiliser un paquet/package se fait de façon identique à l'importation d'un fichier .py, cependant Python traitera le répertoire ''test'' entier comme le paquet/package lui-même. Cela signifie surtout que vous aurez besoin d'exécuter Python depuis le répertoire parent du répertoire "''test''" (et Python sera capable de trouver le paquet).
  
'''Also note be sure you don't have a test.py file in the same directory as the test package'''! If you do Python could get confused and import the test.py file instead of the test packageDelete test.py if it exists next to the test package folder!
+
'''Assurez-vous de ne pas avoir un fichier test.py et un paquet/package (répertoire) test''' dans le même répertoire! Sinon Python ne s’emmêlera les pinceaux et importera le fichier/module test.py à la place du paquet/package "test"Effacez le fichier "test.py" s'il existe un paquet/package test dans le même répertoire!
  
Run the following code in the Python REPL to import and use the add and subtract functions from the test package:
+
Exécutez le code suivant dans une invite REPL de votre carte MicroPython pour importer et utiliser les fonctions {{fname|add()}} et {{fname|substract()}} disponibles dans le paquet/package:
  
 
  <syntaxhighlight lang="python">
 
  <syntaxhighlight lang="python">
Ligne 115 : Ligne 129 :
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-20.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-20.png}}
  
You should see the package imported and the functions work exactly as you saw beforeIf you see an ImportError that the test module doesn't exist be sure you're running Python from the '''parent''' of the test package directory!
+
Vous devriez pouvoir importer le paquet/package et les fonctions fonctionner exactement comme vu ci-dessusSi vous constatez un message {{fname|ImportError}} indiquant que le module n'existe pas alors vérifiez que vous exécutez bien Python depuis le répertoire '''parent''' de votre répertoire du paquet/package "test"!
  
Now try copying the package to your MicroPython board and using it exactly as you did with desktop Python. '''Again make sure a test.py file doesn't exist on the board or else MicroPython will be confused about what to import'''!  If you have test.py on your board already you can delete it using the following ampy command:
+
Essayez maintenant de copier le paquet/package sur votre carte MicroPython et utilisez le exactement comme vous l'avez fait dans votre environnement PC. '''Encore une fois, assurez-vous qu'il n'y a pas de fichier test.py sur la carte sinon MicroPython ne saura pas lequel, du fichier "test.py" ou répertoire "test", il faudra importer le code'''!  Si vous avez déjà un fichier test.py sur votre carte, vous pouvez l'effacer une utilisant une commande ampy comme celle-ci:
  
 
  <nowiki>ampy --port /board/serial/port rm test.py</nowiki>
 
  <nowiki>ampy --port /board/serial/port rm test.py</nowiki>
  
Now create the test package directory in the root of the board:
+
Créons maintenant la paquet/package test en créant le répertoire "test" à la racine du système de fichier:
  
 
  <nowiki>ampy --port /board/serial/port mkdir test</nowiki>
 
  <nowiki>ampy --port /board/serial/port mkdir test</nowiki>
  
And copy inside the three .py files above that define the package (run these commands from '''inside''' the test package folder):
+
Copions ensuite les 3 fichiers .py qui définissent le paquet/package (voir ci-dessus) à '''l'intérieur''' du répertoire "test" (donc à '''l'intérieur''' de notre paquet/package):
  
 
  <nowiki>ampy --port /board/serial/port put __init__.py test/__init__.py
 
  <nowiki>ampy --port /board/serial/port put __init__.py test/__init__.py
Ligne 131 : Ligne 145 :
 
ampy --port /board/serial/port put subtract.py test/subtract.py</nowiki>
 
ampy --port /board/serial/port put subtract.py test/subtract.py</nowiki>
  
These commands will copy the .py files to the test folder on the board's filesystem. Use the {{fname|ls}} command to double check there's a test folder with these three files on your board:
+
Ces commande copierons les fichiers .py dans le répertoire "test" du système de fichier de la carte MicroPython. Utilisez la commande {{fname|ls}} pour vérifier la présence du répertoire {{fname|test}} et qu'il contient les trois fichiers nécessaires:
  
 
  <nowiki>ampy --port /board/serial/port ls test</nowiki>
 
  <nowiki>ampy --port /board/serial/port ls test</nowiki>
Ligne 137 : Ligne 151 :
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-21.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-21.png}}
  
 +
Connectez vous ensuite en REPL sur la carte et essayez d'importer le paquet/package test pour utiliser ses différentes fonctions (comme nous l'avons déjà fait):
 +
 +
<syntaxhighlight lang="python">
 +
import test
 +
test.add(1, 1)
 +
test.subtract(1, 1)
 +
</syntaxhighlight>
 +
 +
{{ADFImage|FEATHER-CHARGER-MODULE-IMPORT-22.png}}
 +
 +
Vous devriez voir le paquet/package s'importer et les fonctions fonctionner exactement comme c'était le cas avec le fichier test.py !
 +
 +
Subdiviser un module complexe en plusieurs fichiers contenu dans un packet/package est une bonne façon de simplifier la structure du code (et parfois le code lui-même). Dans cet exemple un peu simplicte nous avons déployé beaucoup de zèle (et de travail inutile). Dans le cas présent, le paquet/package est, au final, est "plus complexe" que le simple fichier "test.py". Le but est avant tout de comprendre le fonctionnement d'un paquet/package, chose que vous trouverez utile lorsque vous voudrez réutiliser du code, le partager, ou en réduire la complexité.
  
 
{{FEATHER-CHARGER-MODULE-TRAILER}}
 
{{FEATHER-CHARGER-MODULE-TRAILER}}

Version actuelle datée du 11 novembre 2016 à 17:42


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Importer un fichier de code

Comme pour une version standard de Python, vous pouvez importer et exécuter du code provenant de fichiers python dans votre script MicroPython. Cette approche est idéal pour décomposer un long script ou script complexe en des morceaux de codes plus petits. Cela permet de réutiliser ou partager du code entre plusieurs project. Cela facilite également le processus de maintenance.

Si vous n'avez pas l'habitude des modules Python alors vous devriez prendre connaissance de la documentation officielle (Python.org, Anglais). Python vous permet de placer du codans dans un fichier .py puis de l'importer depuis un autre script se trouvant dans le même répertoire. Vous pouvez même opter pour une approche plus avancée en créant un paquet (package en anglais) contenant plusieurs fichiers .py que vous pourrez exposer de différentes façons. La plupart des bibliothèques Python tierces sont disponibles sous forme de paquet que vous pouvez installer et importer dans vos propres scripts.

Nous allons commencer par voir comment importer du code depuis un simple fichier .py dans votre script MicroPython. Assurez-vous d'avoir une carte fonctionnant sous MicroPython et de vous être familiarisé avec les manipulations de fichier sur votre carte.

Ensuite, nous allons commencer par créer un petit fichier Python sur notre ordinateur, il contiendra quelques fonctions. Créez le fichier test.py avec un éditeur de texte et copiez y le code suivant:

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

La fonction add() permet de faire l'addition de deux valeurs tandis que la fonction substract() effectue une soustraction.

Testez d'abord ce code depuis votre ordinateur avec la version PC de Python avant de l'essayer sur MicroPython. Dans un termminal, naviguez dans le répertoire contenant le fichier test.py (ceci est très important, vous devez vous trouver dans le même répertoire que test.py!) puis exécutez la commande python3 (ou python si vous utilisez Python 2.x).

Saisissez les commandes suivantes sur l'invite de commande Python (ou invite REPL... lorsque vous testerez sous MicroPython):

import test
test.add(1, 1)

Vous devriez voir l'appel a la fonction add() (ajouter) et le resultat 1 + 1 retourné. Si vous voyez un ImportError indiquant le module test ne peut pas être chargé alors assurez vous que vous exécutez Python depuis le même répertoire que votre fichier test.py.

Essayez ensuite d'appeler la fonction subtract() (soustraction) comme nous l'avons fait pour l'addition. Rappelez vous bien d'ajouter le nom du module devant le nom de la fonction que vous voulez appeler!

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Maintenant que vous savez comment importer un simple fichier .py sur votre ordinateur, nous allons faire la même chise avec notre carte MicroPython. Copiez le fichier test.py dans le répertoire racine (dit root en anglais) de votre système de fichier. Par exemple, si vous utilisez un outil tel que ampy pour copier les fichiers que vous désirez exécuter alors vous devriez utiliser une syntaxe similaire à celle-ci:

ampy --port /board/serial/port put test.py

Connectez vous ensuite en REPL sur la carte et exécutez les mêmes instructions Python (que celles ci-dessus) pour importer et utiliser le module:

import test
test.add(1, 1)
test.subtract(1, 1)

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Vous devriez voir les fonctions fonctionner exactement comme elles le font dans le programme Python de votre ordinateur! Si vous voyez un message d'erreur ImportError alors vérifiez l'opération de copie du fichier test.py sur la racine du système de fichier de votre carte puis essayez encore.

Importer et utiliser du code depuis un fichier .py avec MicroPython est aussi facile que l'opération que nous venons d'apprendre. Il faut copier le fichier sur la carte puis l'importer avec l'instruction import comme vu ci-dessus.

Souvenez vous que le fichier .py a importer doit se trouver dans le répertoire que le script qui l'importe et l'utilise. Dans la plupart des cas vos scripts se trouverons dans la racine du système de fichier, ce sera donc l'emplacement où vous placerez naturellement les fichier .py que vous voudrez importer.

Grâce à l'importation, vous pouvez faire bien plus qu'importer et appeler des fonctions dans vos scripts. Tout ce qui se trouve dans le fichier test.py comme les classes, les fonctions, les variables globales, etc seront disponibles votre script dès la commande d'importation import exécutée.

Trucs & astuces: il est possible de voir exactement ce qui se trouve dans un module en utilisant l'instruction dir(), voyez l'exemple suivant qui peut être exécuté dans REPL:

import test
dir(test)

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Vous devriez voir une liste de tout ce qui à été importé dans le module, y compris les fonctions add() et subtract() (la variable __name__ est ajoutée par Python pour que le module puisse connaître son propre nom).

Les paquets (Packages)

Il arrive parfois que votre code devienne tellement complexe que le placer dans un unique fichier à importer n'a pas, non plus, beaucoup de sens!

Dans ce cas, vous pouvez scinder votre code en plusieurs fichiers et créer ce que l'on appelle un "Package" Python ("package" est un terme anglais que l'on traduit généralement par "paquet"). Les Package/Paquet rassemble tout le code ensemble en quelque-chose qui à un simple module que vos scripts peuvent importer. MicroPython supporte le concept de Package/Paquet Python comme le language Python standardiser. L'utilisation des Paquets/Packages permet d'offrir une meilleure structure à vos scripts et projets vraiment complexes.

Avant tout, assurez-vous d'avoir pris connaissance de la documentation officielle des packages/paquets Python (python.ord, anglais). les Paquets/Packages en MicroPython fonctionne, pour la plupart des cas, de la même façon qu'en Python.

Nous allons maintenant créer un paquet/package Python sur notre ordinateur. Créez un répertoire appelé test et ajoutez le fichier add.py à l'intérieur de celui-ci.

Dans le fichier add.py, ajoutez la fonction add tel que déclarée ci-dessous:

def add(a, b):
    return a + b

Créez aussi un fichier subtract.py dans le même emplacement et ajouter la fonction substract tel que déclarée ci-dessous:

def subtract(a, b):
    return a - b

Pour finir, créez un fichiez appelé __init__.py dans le même emplacement. Saisissez y le code suivant pour importer et exposer les fonctions des deux fichiers add.py et substract.py précédemment crées:

from test.add import add
from test.subtract import subtract

Soyez attentif, le fichier doit exactement s'appeler __init__.py! Python recherche ce nom de fichier pour savoir s'il s'agit d'un paquet/package. Si vous n'avez pas ce fichier ou s'il nest pas nommé correctement alors Python n'importera pas le paquet!

Le code à l'intérieur du fichier __init__.py est exécuté lorsque le paquet/package est importé par un script. Vous pouvez voir dans le code de __init__.py qu'il importe la fonction add depuis le fichier add.py (contenu dans le paquet/package) ainsi que la fonction substract contenu dans le fichier subtract.py.

Notez que l'instruction d'importation référence le fichier add.py en utilisant un "nom d'importation absolu". Par exemple, le fonction add est importée depuis test.add. Le 'test.' est le nom du paquet/package, par exemple: le nom du répertoire du paquet/package. Le 'add' derrière le 'test.add' est le nom du fichier python (add.py) où l'interpréteur Python trouvera la fonction à importer.

Suivant l'instruction from test.add import add, nous importons donc une fonction add depuis le fichier add.py se trouvant dans le répertoire "test" (comme stipulé par test.add).

Dans le script __init__.py, vous ne pourrez pas exécuter une commande tel que "from add import add" étant donné que cette instruction est totalement confuse pour Python. En effet, il essayera de charger la fonction add depuis le module add.py (le fichier add.py) se trouvant dans le même répertoire où est exécuté le script principal (comme expliqué en début de cette section). En utilisant le nom complet test.add nous indiquons à Python d'utiliser le fichier/module add.py à l'intérieur du répertoire paquet/package test .

Vérifiez que le paquet/package test soit confirme avec la structure suivant:

  • Répertoire test
    • Le fichier __init__.py qui importe les fonctions add() et substract()
    • Le fichier add.py qui expose la fonction add()
    • Le fichier subtract.py qui expose la fonction subtract()

Essayez maintenant d'importer et d'utiliser le paquet/package avec la version PC de Python. Utilisez un terminal et naviguez jusqu'au répertoire parent du répertoire "test" contenant notre paquet/package (ex. le répertoire juste avant le répertoire "test"). Importer et utiliser un paquet/package se fait de façon identique à l'importation d'un fichier .py, cependant Python traitera le répertoire test entier comme le paquet/package lui-même. Cela signifie surtout que vous aurez besoin d'exécuter Python depuis le répertoire parent du répertoire "test" (et Python sera capable de trouver le paquet).

Assurez-vous de ne pas avoir un fichier test.py et un paquet/package (répertoire) test dans le même répertoire! Sinon Python ne s’emmêlera les pinceaux et importera le fichier/module test.py à la place du paquet/package "test". Effacez le fichier "test.py" s'il existe un paquet/package test dans le même répertoire!

Exécutez le code suivant dans une invite REPL de votre carte MicroPython pour importer et utiliser les fonctions add() et substract() disponibles dans le paquet/package:

import test
test.add(1, 1)
test.subtract(1, 1)

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Vous devriez pouvoir importer le paquet/package et les fonctions fonctionner exactement comme vu ci-dessus! Si vous constatez un message ImportError indiquant que le module n'existe pas alors vérifiez que vous exécutez bien Python depuis le répertoire parent de votre répertoire du paquet/package "test"!

Essayez maintenant de copier le paquet/package sur votre carte MicroPython et utilisez le exactement comme vous l'avez fait dans votre environnement PC. Encore une fois, assurez-vous qu'il n'y a pas de fichier test.py sur la carte sinon MicroPython ne saura pas lequel, du fichier "test.py" ou répertoire "test", il faudra importer le code! Si vous avez déjà un fichier test.py sur votre carte, vous pouvez l'effacer une utilisant une commande ampy comme celle-ci:

ampy --port /board/serial/port rm test.py

Créons maintenant la paquet/package test en créant le répertoire "test" à la racine du système de fichier:

ampy --port /board/serial/port mkdir test

Copions ensuite les 3 fichiers .py qui définissent le paquet/package (voir ci-dessus) à l'intérieur du répertoire "test" (donc à l'intérieur de notre paquet/package):

ampy --port /board/serial/port put __init__.py test/__init__.py
ampy --port /board/serial/port put add.py test/add.py
ampy --port /board/serial/port put subtract.py test/subtract.py

Ces commande copierons les fichiers .py dans le répertoire "test" du système de fichier de la carte MicroPython. Utilisez la commande ls pour vérifier la présence du répertoire test et qu'il contient les trois fichiers nécessaires:

ampy --port /board/serial/port ls test

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Connectez vous ensuite en REPL sur la carte et essayez d'importer le paquet/package test pour utiliser ses différentes fonctions (comme nous l'avons déjà fait):

import test
test.add(1, 1)
test.subtract(1, 1)

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Vous devriez voir le paquet/package s'importer et les fonctions fonctionner exactement comme c'était le cas avec le fichier test.py !

Subdiviser un module complexe en plusieurs fichiers contenu dans un packet/package est une bonne façon de simplifier la structure du code (et parfois le code lui-même). Dans cet exemple un peu simplicte nous avons déployé beaucoup de zèle (et de travail inutile). Dans le cas présent, le paquet/package est, au final, est "plus complexe" que le simple fichier "test.py". Le but est avant tout de comprendre le fonctionnement d'un paquet/package, chose que vous trouverez utile lorsque vous voudrez réutiliser du code, le partager, ou en réduire la complexité.


Source: MicroPython Basics: Loading Modules
Créé par Tony DiCola pour AdaFruit Industries.

Traduit par Meurisse D. pour MCHobby

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com