FEATHER-CHARGER-MODULE-IMPORT

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


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 fonction add et subtract functions (the __name__ variable is something Python adds to let the module know what its name is).

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.

First be sure to read the official documentation on Python packages. Packages in MicroPython for the most part work just the same as in Python.

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:

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

Create a file subtract.py in the same location and place in it the subtract function code:

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

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:

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

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!

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.

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 elsewhere. Using the full name test.add tells Python to use the add.py module inside the test package directory.

Double check you have a test package structure that looks like the following:

  • test directory
    • __init__.py file which imports the add and subtract functions
    • add.py which exposes the add function
    • subtract.py which exposes the subtract function

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.

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 package. Delete test.py if it exists next to the test package folder!

Run the following code in the Python REPL to import and use the add and subtract functions from the test package:

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

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

You should see the package imported and the functions work exactly as you saw before! If 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!

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:

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

Now create the test package directory in the root of the board:

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

And copy inside the three .py files above that define the package (run these commands from inside the test package folder):

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

These commands will copy the .py files to the test folder on the board's filesystem. Use the ls command to double check there's a test folder with these three files on your board:

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

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

Connect to the board's REPL and try importing the test package and using its functions as before:

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

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

You should see the package import and the functions work exactly as before when they were in a single test.py file!

Breaking a complex module apart into multiple files with a package is a great way to simplify and structure code. In this simple example it seems like a bit of unnecessary work, but as scripts get more complex and re-use common code it will help immensely to break them into modules and packages. You can even start to share code with others by giving them your modules and packages to load and use!


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