Importer des fonction d'un module qui import d'un module

Résolu/Fermé
hpfort Messages postés 16 Date d'inscription vendredi 16 avril 2021 Statut Membre Dernière intervention 22 janvier 2022 - Modifié le 27 août 2021 à 19:07
hpfort Messages postés 16 Date d'inscription vendredi 16 avril 2021 Statut Membre Dernière intervention 22 janvier 2022 - 28 août 2021 à 17:15
Bonjour,
j'ai mon fichier principal et je veux importer des fonctions d'un module qui (la fonction) importe, elle aussi, des fonctions d'un autre module.

comment puis-je faire ?

main.py :
#coding:utf-8
from module1 import *
print("text")
print("text")
fonction1()


module1.py :
#coding:utf-8
def fonction1():
 from module2 import *
 print("text")
    fonction2()


module2.py :
#coding:utf-8
def fonction2():
 print("text")


erreur du cmd :
Traceback (most recent call last):
File "c:\aaaaa\aaaaa\aaaaaa\main.py", line 2, in <module>
from hutte import *
File "c:\aaaaa\aaaaa\aaaaaa\module1.py", line 3
def a():
^
SyntaxError: import * only allowed at module level


(le chemin d'accès est bon)

pierre
Configuration: Windows / Edge 92.0.902.78

6 réponses

yg_be Messages postés 22783 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 mai 2024 1 481
27 août 2021 à 19:20
bonjour,
il semble que le message d'erreur ne corresponde pas au code que tu présentes. merci de nous embrouiller.
comprends-tu le message "import * only allowed at module level"?
ne vois-tu pas le lien avec module1.py?
0
hpfort Messages postés 16 Date d'inscription vendredi 16 avril 2021 Statut Membre Dernière intervention 22 janvier 2022
27 août 2021 à 19:24
bonjour
juste avant, j’ai testé sans mettre le
from module2 import *
et le code fonctionnais. Ensuite je l'ai rajouté et c'est là que ça a fait une erreur, donc je suppose que l'erreur vient de là.
0
yg_be Messages postés 22783 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 mai 2024 1 481
27 août 2021 à 19:28
comprends-tu le message "import * only allowed at module level"?
0
hpfort Messages postés 16 Date d'inscription vendredi 16 avril 2021 Statut Membre Dernière intervention 22 janvier 2022
28 août 2021 à 13:26
bonjour, je ne le comprenais pas, mais maintenant, c’est bon. Comment puis-je faire du coup pour que je puisse importer le module2 depuis le module1 qui est importé depuis le main
0
yg_be Messages postés 22783 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 mai 2024 1 481
28 août 2021 à 15:12
tu écris "c'est bon", sans nous montrer ce que tu as essayé.
je suggère de faire
import bidule
au lieu de
from bidule import *
.
exemple:
def fonction1():
 import module2 
 print("text f1")
 module2.fonction2()
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
28 août 2021 à 14:10
Bonjour,

un import à l'intérieur d'une fonction, c'est glauque ...
0
Bonjour,

Non, ce n'est pas "glauque", l'intérêt principal est de ne pas polluer l'espace global avec un module dont on ne se servira que dans une fonction précise.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
28 août 2021 à 15:03
Alors, non seulement je trouve ça glauque, mais l'interpréteur Python aussi :

SyntaxError: import * only allowed at module level
0
Evidemment, c'est pour ça que l'on doit garder le module importé dans son namespace.
0
vortex > vortex
28 août 2021 à 15:34
On est d'accord =)

Mais dans malheureusement beaucoup de tuto, cet affreux import * est utilisé à foison.
0
yg_be Messages postés 22783 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 mai 2024 1 481
28 août 2021 à 15:21
moi, c'est le
import *
que je trouve glauque.
je préfère de loin faire un simple "import".
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
28 août 2021 à 15:22
hé oui

et donc en mettant import module2 au lieu de from module2 import * c'est ok ...
0
hpfort Messages postés 16 Date d'inscription vendredi 16 avril 2021 Statut Membre Dernière intervention 22 janvier 2022
28 août 2021 à 17:15
merci je vais le faire
0