Bonjour

J'écris régulièrement des packages qui sont utilisés par d'autres personnes, avec plusieurs modules et, parfois, une (petite) arborescence.

Pour éviter que les utilisateurs aient à connaître très précisément où les classes et les fonctions sont définies et à faire des imports "compliqués", j'ai pris l'habitude d'importer, dans le fichier __init__.py du package ces classes et fonctions qu'ils auront à utiliser.

Par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
 + package
    |__  __init__.py
    |__  module_1.py
    |__  module_2.py
avec module_1.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
class Classe_1(object):
    pass
module_2.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
class Classe_2(object):
    pass
__init__.py :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
from module_1 import Classe_1
from module_2 import Classe_2
__all__ = ['module_1','module_2']
Cela permet alors d'écrire dans les scripts utilisant le package :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
from package import Classe_1, Classe_2
# plutot que
# from package.module_1 import Classe_1
# from package.module_2 import Classe_2
Ca fonctionne mais je ne suis pas sur de bien mesurer les effets de bord possibles ou les inconvénients de cette méthode.
Avez-vous un avis là dessus ?