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.

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

Comment importer un module spécifique ?

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.

Osc 12.png

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

Osc 13.png

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

Osc 14.png Osc 15.png

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

Osc 17.png

L'excécution du script a généré les bytecodes Osc 16.png

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

Osc 11.png

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:

Osc 09.png

Le fichier ./lib/help_osc.py appelle

from OSC.OSC import decodeOSC

puis

data = decodeOSC(raw_data)

Le dossier OSC contient Osc 10.png

Le fichier __init__.py n' a qu'une ligne import OSC

from OSC.OSC va chercher OSC(donc OSC.py) dans le dossier OSC