À quoi sert le fichier __init__.py
dans un répertoire de sources Python ?
Il s'agissait auparavant d'une partie obligatoire d'un paquet ([ancien "paquet normal", antérieur à la version 3.3] (https://docs.python.org/3/reference/import.html#regular-packages), et non [nouveau "paquet d'espace de noms" 3.3+] (https://docs.python.org/3/reference/import.html#namespace-packages)).
[Voici la documentation.][1]
Python définit deux types de paquets, les paquets réguliers et les paquets d'espace de noms. Les paquets réguliers sont des paquets traditionnels tels qu'ils existaient dans Python 3.2 et antérieurs. Un paquet régulier est typiquement implémenté comme un répertoire contenant un fichier
__init__.py
. Lorsqu'un paquet régulier est importé, ce fichier__init__.py
est implicitement exécuté, et les objets qu'il définit sont liés à des noms dans l'espace de noms du paquet. Le fichier__init__.py
peut contenir le même code Python que n'importe quel autre module, et Python ajoutera quelques attributs supplémentaires au module lorsqu'il sera importé.
Mais cliquez simplement sur le lien, il contient un exemple, plus d'informations, et une explication des namespace packages, le genre de packages sans __init__.py
.
[1] : https://docs.python.org/3/reference/import.html#regular-packages
Le fichier __init__.py
fait en sorte que Python traite les répertoires qui le contiennent comme des modules.
De plus, c'est le premier fichier à être chargé dans un module, donc vous pouvez l'utiliser pour exécuter le code que vous voulez lancer à chaque fois qu'un module est chargé, ou spécifier les sous-modules à exporter.
Il facilite l'importation d'autres fichiers python. Lorsque vous placez ce fichier dans un répertoire (disons stuff) contenant d'autres fichiers py, vous pouvez faire quelque chose comme import stuff.other.
root\
stuff\
other.py
morestuff\
another.py
Sans ce __init__.py
dans le répertoire stuff, vous ne pourriez pas importer other.py, car Python ne sait pas où se trouve le code source de stuff et ne peut pas le reconnaître comme un paquet.