Modules et sous-modules
Ce wiki a été archivé en 2018.
Le nouveau wiki se trouve à: ressources.labomedia.org Les fonctionnalités sont désactivées: vous pouvez faire une recherche sur Google site:https://wiki.labomedia.org et découvrir La Labomedia. |
- Importer un module python dans un script
- 1 - Définition d'un module: Principe des modules.
- 2 - Modules et sous-modules: Modules et sous-modules, package.
Comment importer un module spécifique ?
Sommaire
Installation dans le système de fichier
Appliquer le README de votre module qui installe en root dans le système de fichier. La doc pour un développeur de modules.
Le module sera trouvé au lancement du script.
Solutions en définissant le chemin vers votre module dans votre projet
- si le module ne doit être utilisé que par votre projet
- si vous voulez limiter les dépendances
cela permet de publier vos créations avec un dossier qui comprend toutes les bibliothèques nécessaires, sans demander d'installer des dépendances. La doc officielle décrit cette méthode.
Le module est dans votre répertoire courant
C'est la solution la plus simple, python cherche en premier dans ce répertoire. Les fichiers sont sur Envoyer_et_recevoir_de_l'OSC_en_python#Exemple_simple.
Les fichiers exemple_receive.py et exemple_send.py commence par:
#!/usr/bin/python import OSC
Modules et sous-modules
Vous pouvez organiser vos modules en répertoire et créer des sous-modules. Exemple: Soit deux modules M1.py et M2.py qui sont des sous modules de M. Nous avons
Pour indiquer que M est un répertoire module, il faut un fichier supplémentaire __init__.py qui sera lu lors de la lecture de
import M
Il contient l'équivalent de ce qu'aurait contenu un fichier M.py
De plus ce fichier, qui peut être vide si M n'est qu'une coquille permettant de classer les modules, autorisera l'accès aux sous-modules. Pour cela, il faudra décrire le chemin depuis le module M jusqu'à eux:
import M.M1
Le module M est appelé paquetage.
Exemple
mon_projet.py
#!/usr/bin/python import M.M1 as M1 import M.M2 as M2 M1.print_hello() M2.print_world()
__init__.py est vide
M1.py
#!/usr/bin/python def print_hello(): print "hello"
M2.py
#!/usr/bin/python def print_world(): print "world"
Lancer dans un terminal dans le dossier mon_projet
python mon_projet.py
L'excécution du script a généré les bytecodes
Notez l'import avec " as M1", qui évite d'appeler la fonction par M.M1.print_hello() mais par M1.print_hello()
Le module est dans un dossier ajouté au python path
La structure est la même qui ci-dessus, mais la solution est plus compréhensible pour le débutant.
Exemple tiré de Touch_Osc#Utiliser_TouchOSC_dans_un_script_python_pour_faire_de_la_musique_Kollectiv
On ajoute le dossier au sys.path
import sys sys.path.append("./OSC") import OSC sys.path.append("./pyFluidSynth") import fluidsynth
Remarque: Dans cet exemple, il faut quand même installer : fluidsynth fluid-soundfont-gm fluid-soundfont-gs
Cas particulier d'un script dans Blender
Solution simple
Mettre tous les fichiers dans le même dossier: votre_fichier.blend, vos scripts python, les modules par exemple OSC.py Exemple sur cette page Communication entre Pure-data et Blender en OSC pour Blender 2.49, python2.7 et Blender2.6 et python3.2
Solution avec un fichier __init__.py et modules organisés en sous-modules
Cet exemple est tiré de OSCinBlender: une aide pratique. Les fichiers sont rangés dans des dossiers: les scripts blender dans lib, OSC.py dans un dossier OSC, soit:
Le fichier ./lib/help_osc.py appelle
from OSC.OSC import decodeOSC
puis
data = decodeOSC(raw_data)
Le fichier __init__.py n' a qu'une ligne
import OSC
from OSC.OSC va chercher OSC(donc OSC.py) dans le dossier OSC