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])
Cette fonction 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é