Comment gérer les imports ?

Bonjour,

J’ai une question simple pour vous.

Je travail actuellement sur un projet avec plusieurs fichiers.

J’ai besoin d’une librairie dans plusieurs fichiers. Est-ce qu’il y a une façon plus propre que de l’importer à chaque fichier ?

Merci à vous :smiley:

Salut,

Je ne suis pas sûr de bien comprendre la question, qu’y a-t-il de sale à importer un module là où il est utile / utilisé ?

Alors, c’était plutôt une façon de parler.

J’avais juste le doute de si importer partout ou si je pouvais importer globale, si jamais ça existe.

En Python nous n’avons pas de « super globale », nos variables globales ne sont globales qu’au fichier dans lequel elles sont.

Par exemple la variable globale pi du module math n’est visible que dans le module math, et si tu veux accéder à pi tu dois l’importer, soit via :

import math
print(math.pi)

Soit via :

from math import pi
print(pi)

Note que peu importe la syntaxe que tu utilise pour importer, aucun nom n’apparaît par magie : dans le premier cas on importe explicitement math et on utilise le nom math, dans le second cas on importe le nom pi et on utilise le nom pi. Ce côté explicite est agréable : on sait toujours de quel fichier vient quelle fonction/classe/globale/… Jamais besoin de tâtonner, tout est écrit.

Côté performances, ne t’inquiètes pas, l’interpréteur triche : lorsque tu importe ton module 15 fois parce que tu en as besoin dans 15 fichiers différent, il l’importe une fois, et le réutilise 14 fois. D’un côté heureusement : on a pas 15 variables pi, on en a une seule, réutilisée partout où elle est nécessaire.

Pour aller un peu plus loin que le simple question des imports, il peut etre plus propre de définir ta propre fonction / module - importer la librairie une fois dans ta fonction et importer ta fonction partout dans ton code. Ca permet de changer de librairie externe ou changer la manière de l’utiliser sans changer les imports et le code partout. C’est un bon reflexe de refléchir si oui ou non tu veux rendre tout ton code dépendant de cette librairie, si oui ou non tu veux faciliter le fait de migrer sur une autre librairie plus tard.

Merci pour toutes ces informations.

Je me suis posé la question car comme bonne personne que je suis, j’ai voulu typer mes entrées/sorties des fonctions. Vu que ces fonctions sont utilisés dans un autre fichier, je me suis pas trop soucié de l’import de la librairie mais avec le typage, hélas il me faut les types qui viennent avec cette libraire, d’où la question.

En tou cas merci pour vos réponses, tout est bien plus clair :slight_smile:

Si tu ne souhaites pas utiliser la bibliothèque externe pour expliciter ton type, tu peux aussi définir ton propre protocole définissant uniquement ce qui t’intéresse sur le type en question, et l’utiliser partout où tu en as besoin.