OVH Cloud OVH Cloud

utilisation de __init__.py

3 réponses
Avatar
DAIREAUX Jean-Baptiste
j'ai bien comprit que __init__.py sert à marquer un paquet de module.

mais je ne vois pas ce que l'on peut mettre dedans?
à quoi l'utilisé vous en générale ?

merci d'avance pour vos conseille avisé.

J.B.D.

3 réponses

Avatar
Eric Brunel
On Fri, 4 Mar 2005 09:48:03 +0100, DAIREAUX Jean-Baptiste wrote:

j'ai bien comprit que __init__.py sert à marquer un paquet de module.

mais je ne vois pas ce que l'on peut mettre dedans?
à quoi l'utilisé vous en générale ?

merci d'avance pour vos conseille avisé.

J.B.D.


Voilà un exemple typique d'utilisation que je fais du fichier __init__.py lorsque j'ai un module externe écrit en C et que je veux l'utiliser sur plusieurs plateformes:

monmodule/
__init__.py:
import sys
if sys.platform.startswith('linux'):
from monmodule.linux_module.monmodule import *
elif sys.platform.startswith('win'):
from monmodule.windows_module.monmodule import *
...
linux_module/
monmodule.so
windows_module/
monmodule.pyd
...

Ca permet d'utiliser partout:
import monmodule
sans avoir à se préoccuper de quel module effectif on va importer: le __init__.py se débrouille tout seul. Dans le cas Linux/Windows, c'est assez peu important, vu que l'extension du module est .so sous Linux et .pyd ou .dll sous Windows. Mais quand on supporte différents Unix, l'extension est .so partout et ce "truc" est bien utile...

Mais dans 99% des cas, le __init__.py est vide...
--
python -c 'print "".join([chr(154 - ord(c)) for c in "U(17zX(%,5.z^5(17l8(%,5.Z*(93-965$l7+-"])'

Avatar
Hervé Cauwelier
DAIREAUX Jean-Baptiste wrote:
j'ai bien comprit que __init__.py sert à marquer un paquet de module.

mais je ne vois pas ce que l'on peut mettre dedans?


Sa présence suffit mais tu peux y mettre le copyright et la licence, par
exemple.

à quoi l'utilisé vous en générale ?


Tu peux importer des symboles de sous-modules pour les importer sans
passer par le sous-module. Tu peux aussi créer des variables, des
instances de classe, des fonctions...
Exemple :

from monmodule import toto

Avec __init__.py qui aura créé cette variable ou instance de classe ou
fonction, etc. « toto ».

Dans les répertoires qui constituent des sous-modules, n'oublie pas de
mettre un autre fichier __init__.py

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
DAIREAUX Jean-Baptiste
Merci pour vos conseille.

J.B.D.