6.9. Importation de modules
En Python, la façon habituelle d'importer des modules dans un script est d'utiliser le mot-cléimport
. L'interpréteur recherche dans une liste de répertoires un module avec le nom indiqué, et, s'il en trouve un, il ajoute le nom du module à l'espace de noms du script
Ceci fonctionne bien dans un environnement mono utilisateur et mono process, mais pose problème si plusieurs utilisateurs peuvent interagir avec l'interpréteur au même moment. Chacun d'eux peut modifier la liste des répertoires dans lequel on cherche les modules, et si 2 utilisateurs veulent importer des modules différents mais avec le même nom, il se peut que l'interpréteur renvoie le module de l'utilisateur A à l'utilisateur B
Pour importer sans risque des modules dans Karrigell, voici ce que vous devez faire :
- si le module est dans votre distribution standard Python, ou a été installé par les outils setup, utilisez simplement le mot-clé
import
: il n'y a aucun risque de confusion - vous pouvez stocker vos propres modules dans le répertoire package
de votre distribution Karrigell, et les importer par
import
- pour les modules écrits par l'utilisateur dans une application, utilisez la fonction intégrée
Import(url_module[,**kw])
Import()
renvoie un objet qui se comporte comme un module importé. Pour l'utiliser dans le script vous devez donner un nom à cet objet :
foo = Import("foo.py")
L'équivalent de from foo import bar
est :
bar = Import("foo.py").bar
Notez qu'il n'y a pas d'équivalent à from foo import *
L'url du module importé est résolue comme les url de script, vous n'avez donc pas à spécifier l'extension : foo = Import("foo")
fonctionne aussi
Les scripts importés sont exécutés dans un espace de noms qui inclut certains
des noms intégrés définis dans le script "appelant" (CONFIG, _(), Import(),
PRINT()
), mais pas ceux qui sont relatifs au répertoire de ce script, parce
que le script importé peut se trouver dans un autre répertoire. Si vous voulez que
CWD
ou REL
soient disponibles dans le script importé,
il faut les passer explicitement comme arguments de Import()
:
foo = Import("foo",REL=REL)
Dans foo.py le nom REL
sera disponible :
import os contenu = open(REL("data.txt"))
Plus généralement, vous pouvez passer des paramètres mots-clés à la fonction
Import()
si vous en avez besoin dans le script importé