re-import d'un module

Le
Fabrice
Bonjour,

j'ai créé dans un objectif d'enseignement un module Python qui possède
une fonction DonnéeSuivante() qui porte bien son nom ;-)

Au premier import, mon programme fonctionne bien et je peux récupérer
les données au fur et à mesure à partir de la première donnée.

J'intègre mon programme dans un fichier jupyter. Tout se passe donc dans
une même session.


J'aimerai lorsque je passe à l'amélioration de mon programme qu'à
l'import du module celui-ci soit réellement ré-importé et que les
variables soient réinitialisées pour que la fonction DonnéeSuivante()
recommence à son comportement initial sans que l'utilisateur ait à s'en
soucier.

Comment faire ?

Cordialement,
Fabrice.


L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #26518941
Fabrice :
Bonjour,
j'ai créé dans un objectif d'enseignement un module Python qui possède une
fonction DonnéeSuivante() qui porte bien son nom ;-)
Au premier import, mon programme fonctionne bien et je peux récupérer les
données au fur et à mesure à partir de la première donnée.
J'intègre mon programme dans un fichier jupyter. Tout se passe donc dans une
même session.
J'aimerai lorsque je passe à l'amélioration de mon programme qu'à l'import du
module celui-ci soit réellement ré-importé et que les variables soient
réinitialisées pour que la fonction DonnéeSuivante() recommence à son
comportement initial sans que l'utilisateur ait à s'en soucier.
Comment faire ?

Il me semble que je ne ferais pas de cette façon (mais j'ignore
Jupyter, je préfère Jupyler).
Pourquoi pas:
import sys
...
if 'nomdevotremodule' not in sys.modules:
import nomdevotremodule
else
nomdevotremodule.moninit()
(nomdevotremodule.moninit à écrire)
Sinon vous avez peut-être reload(), qui devient imp.reload() puis
importlib.reload() en Python 3 puis Python 3.4. Mais ça va dépendre de
ce à quoi est lié le module, c'est typiquement le genre de truc qui
fonctionne dans un premier temps puis se met à faire des trucs étranges
après telle ou telle modification.
Avec la première solution, je contrôle: je veux recharger le module
pour qu'il redémarre une séquence (si j'ai bien compris), alors je lui
dis simplement de redémarrer la séquence.
--
Pierre Maurette
ast
Le #26518946
bonjour
import mymod
import sys
del(sys.modules['mymod'])
import mymod



ou bien reload
import importlib # python 3.4 ou plus
importlib.reload(mymod)

Le 12/06/2019 à 11:11, Fabrice a écrit :
Bonjour,
j'ai créé dans un objectif d'enseignement un module Python qui possède
une fonction DonnéeSuivante() qui porte bien son nom ;-)
Au premier import, mon programme fonctionne bien et je peux récupérer
les données au fur et à mesure à partir de la première donnée.
J'intègre mon programme dans un fichier jupyter. Tout se passe donc dans
une même session.
J'aimerai lorsque je passe à l'amélioration de mon programme qu'à
l'import du module celui-ci soit réellement ré-importé et que les
variables soient réinitialisées pour que la fonction DonnéeSuivante()
recommence à son comportement initial sans que l'utilisateur ait à s'en
soucier.
Comment faire ?
Cordialement,
Fabrice.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
https://www.avast.com/antivirus
Pascal J. Bourguignon
Le #26518966
Fabrice
Bonjour,
j'ai créé dans un objectif d'enseignement un module Python qui possède
une fonction DonnéeSuivante() qui porte bien son nom ;-)
Au premier import, mon programme fonctionne bien et je peux récupérer
les données au fur et à mesure à partir de la première donnée.
J'intègre mon programme dans un fichier jupyter. Tout se passe donc
dans une même session.
J'aimerai lorsque je passe à l'amélioration de mon programme qu'à
l'import du module celui-ci soit réellement ré-importé et que les
variables soient réinitialisées pour que la fonction DonnéeSuivante()
recommence à son comportement initial sans que l'utilisateur ait à
s'en soucier.
Comment faire ?

En BASIC, il y avait READ pour lire la DATA suivante, et RESTORE, pour
revenir à la première DATA.
Il suffirait d'implémenter une fonction similaire à RESTORE, et à
l'appeler dans le code d'initialisation du module.
--
__Pascal J. Bourguignon__
http://www.informatimago.com
Fabrice
Le #26519018
Bonjour Pierre, Ast et Pascal,
La solution me semble trop compliquée pour mon objectif (un cours sur le
traitement des données, le but n'est pas d'apprendre Python).
Je vais donc suivre les conseils de Pierre et Pascal et créer une
fonction RemiseAZero().
Merci à tous les trois.
cordialement,
Fabrice.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Nicolas
Le #26519026
Bonjour,
Plutôt qu'une fonction RemiseAZero(), je ferai une fonction
Initialisation().
La fonction fait la même chose.
Mais pour l'esprit, c'est, à mon avis, plus clair. La procédure est
toujours la même : Initialisation, récupération de données.
Nicolas
Le 13/06/2019 à 11:46, Fabrice a écrit :
Bonjour Pierre, Ast et Pascal,
La solution me semble trop compliquée pour mon objectif (un cours sur le
traitement des données, le but n'est pas d'apprendre Python).
Je vais donc suivre les conseils de Pierre et Pascal et créer une
fonction RemiseAZero().
Merci à tous les trois.
cordialement,
Fabrice.
---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
https://www.avast.com/antivirus
Fabrice
Le #26519129
Le 13/06/2019 à 14:20, Nicolas a écrit :
Plutôt qu'une fonction RemiseAZero(), je ferai une fonction
Initialisation().
La fonction fait la même chose.
Mais pour l'esprit, c'est, à mon avis, plus clair.

Effectivement.
cordialement,
Fabrice
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Publicité
Poster une réponse
Anonyme