Importation de fonctions et de packages#

Très souvent, nous avons besoin d’outils qui ne sont pas directement fournis par la bibliothèque Python par défaut. Dans ce cas, nous devons importer les fonctions nécessaires à partir de modules ou de packages dans nos notebooks ou scripts. Certains modules sont fournis directement avec la distribution Python (comme le module math vu dans Math de base en python), et d’autres comme Numpy, scikit-image etc. sont des packages externes installés avec pip ou conda. En ce qui concerne l’importation, ils fonctionnent de la même manière, et nous avons plusieurs façons d’importer des fonctions individuelles ou des groupes de fonctions.

Importation de base#

L’instruction d’importation de base utilise les mots-clés import et le nom du module. Par exemple, avec le module Python de base pathlib qui gère les chemins et les noms de fichiers :

import pathlib

Si nous voulons importer un package externe, nous devons nous assurer qu’il est effectivement installé, sinon nous obtenons un message d’erreur :

import absent_package
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Input In [14], in <cell line: 1>()
----> 1 import absent_package

ModuleNotFoundError: No module named 'absent_package'

Si vous avez un package manquant, vous pouvez l’installer directement depuis le notebook en utilisant pip ou conda. Par exemple, si Numpy n’est pas encore installé, vous pourriez exécuter :

conda install -c conda-forge numpy
Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.


Note: you may need to restart the kernel to use updated packages.

Formulation alternative d’importation#

En utilisant la formulation simple ci-dessus, nous accédons aux fonctions directement attachées au package principal. Importons le package Numpy que nous utiliserons plus tard pour manipuler des images. Nous pouvons l’importer :

import numpy

et maintenant nous avons accès, par exemple, à la fonction cosinus de Numpy en utilisant simplement la notation pointée :

numpy.cos(3.14)
-0.9999987317275395

Pour trouver toutes les fonctions disponibles dans un package ou un module, vous devez généralement consulter sa documentation et rechercher l’Interface de Programmation d’Application ou API. Par exemple, ici nous trouvons une description de toutes les fonctions mathématiques (y compris le cosinus) de Numpy : https://numpy.org/doc/stable/reference/routines.math.html

Raccourcissement du nom#

Si nous utilisons un package régulièrement, nous pourrions ne pas vouloir écrire le nom complet du package chaque fois que nous avons besoin d’une fonction de celui-ci. Pour éviter cela, nous pouvons l’abréger au moment de l’importation en utilisant l’instruction as :

import numpy as np
np.cos(3.14)
-0.9999987317275395

Fonctions spécifiques#

Si nous n’avons besoin que d’une fonction spécifique d’un package, nous pouvons aussi simplement l’importer en utilisant l’instruction from. Par exemple, si nous voulons importer uniquement la fonction np.cos ci-dessus :

from numpy import cos
cos(3.14)
-0.9999987317275395

Bien sûr, dans ce cas, à moins de trouver la ligne spécifique où la fonction est importée, nous ne savons pas que cos appartient nécessairement à Numpy, car nous aurions pu définir une telle fonction dans le notebook.

Sous-modules#

Dans les packages plus importants comme Numpy, certaines fonctions sont directement accessibles depuis le package principal (comme np.cos) et d’autres, avec des tâches plus spécialisées, sont regroupées par sujet ou domaine dans des sous-modules. Par exemple, Numpy a un sous-module dédié aux distributions appelé random. Tous les points vus ci-dessus sont toujours valables ici.

Nous utilisons la notation pointée pour accéder aux fonctions, mais nous devons maintenant également spécifier le nom du sous-module. Par exemple, la fonction normal qui génère des nombres tirés d’une distribution normale :

np.random.normal()
1.8077301364791438

Nous pouvons raccourcir l’appel de fonction en important uniquement le sous-module :

from numpy import random
random.normal()
0.0909924357071552

et nous pouvons encore raccourcir en important juste la fonction :

from numpy.random import normal
normal()
0.0038794083334154307

Exercice#

Le package Numpy a un sous-module d’algèbre linéaire appelé linalg. Le code suivant calcule la norme d’un vecteur : np.linalg.norm([1,2]). Essayez de :

  • importer seulement le sous-module et appeler la même fonction

  • importer seulement la fonction norm et l’appeler