Package : collection de modules qui sont contenus dans un même directory ou même une arborescence..
On suppose qu'on a un arborescence qui se trouve dans le path :
myPackage/myModule1.py
myPackage/__init__.py
myPackage/myModule2.py
myPackage/mySubPackage
myPackage/mySubPackage/__init__.py
myPackage/mySubPackage/myModule3.py
On peut faire :
- import myPackage.myModule1, alors on peut faire myPackage.myModule1.myFunc si myFunc est une fonction de myModule1.py
- from myPackage import myModule1, alors on peut faire myModule1.myFunc
- from myPackage.myModule1 import myFunc, alors on peut utiliser directement myFunc
- from myPackage.mySubPackage import myModule3, alors on peut utiliser myModule3.myFunc2 si myFunc2 y est définie
- on ne peut pas faire myPackage.myModule1.myFunc : le dernier élément dans un import doit être un package ou un module.
- si on fait from myPackage import * : les modules importés sont ceux définis dans la variable __all__ de __init__.py (par exemple, __all__ = ['myModule1'])
- l'import du package exécute son __init__.py
- on peut dans un module importer un autre module du package :
- soit avec une référence absolue, par exemple dans myModule1 : from myPackage.mySubPackage import myModule3
- soit avec une référence relative, par exemple dans myModule1 : from . mySubPackage import myModule3
- ou si il faut remonter, par exemple dans myModule3 : from .. import myModule2
Pour savoir où se trouve un package avec tout le chemin, par exemple le package numpy : faire python -c 'import numpy; print(numpy.__path__)'.
Import d'un module dans une fonction, mais de façon à ce qu'il soit quand même défini globalement (sinon, défini seulement dans la fonction) :
def myFunc():
global numpy
import numpy
Pour supprimer les warnings :
Pour enlever les FutureWarnings : from warnings import simplefilter; simplefilter(action = 'ignore', category = FutureWarning)