Question

Supposons que j'ai la structure suivante:

app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py

a.py, b.py et c.py partagent des importations communes (journalisation, os, re, etc.). Est-il possible d'importer ces trois ou quatre modules communs à partir du fichier __ init __. Py afin que je n'ai pas à les importer dans chacun des fichiers?

Éditer: mon objectif est d'éviter d'avoir à importer 5 à 6 modules dans chaque fichier, ce qui n'est pas lié aux performances.

Était-ce utile?

La solution

Non, ils doivent être placés dans l'espace de noms de chaque module, vous devez donc les importer d'une manière ou d'une autre (à moins que vous ne transmettiez logging comme argument de fonction, ce qui serait une façon bizarre de faire les choses, le moins qu'on puisse dire).

Mais les modules ne sont importés qu’une fois de toute façon (puis insérés dans les a , b et c espaces de noms), alors don ' Ne craignez pas d’utiliser trop de mémoire ou quelque chose comme ça.

Vous pouvez bien sûr les mettre dans un module séparé et importer ce dans chaque code , b et c , mais ce module séparé devra toujours être importé à chaque fois.

Autres conseils

Vous pouvez le faire en utilisant un fichier commun tel que include.py , mais cela va à l'encontre des pratiques recommandées car il implique une importation avec caractère générique. Considérez les fichiers suivants:

app/
    __init__.py
foo/
    a.py
    b.py
    c.py
    include.py <- put the includes here.
    __init__.py

Maintenant, dans a.py , etc., faites:

from include import *

Comme indiqué ci-dessus, cela n'est pas recommandé car les importations par caractère générique sont déconseillées.

Oui, mais ne le faites pas . Sérieusement, non. Mais si vous voulez toujours savoir comment le faire, cela ressemblera à ceci:

import __init__

re = __init__.re
logging = __init__.logging
os = __init__.os

Je dis de ne pas le faire non seulement parce que c'est désordonné et inutile, mais aussi parce que votre paquet n'est pas vraiment supposé utiliser __ init __. py comme ça. C'est le code d'initialisation du paquet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top