Je pense ce poste devrait vous aider
modifier : Afin de garantir la disponibilité de cette information (au cas où le lien disparaîtrait ou quelque chose de similaire), je vais inclure le message original de la page d'accueil. liste de diffusion des tuteurs ici :
Le 14/08/06, Dick Moores a écrit :
En fait, ma question est la suivante : après avoir utilisé IDLE pour importer des modules et initialiser des variables. modules et l'initialisation des variables, comment revenir à son initial sans le fermer et le rouvrir.
Donc, par exemple, après avoir fait
>>> import math, psyco
>>> a = 4**23
Comment puis-je les effacer sans fermer IDLE ? (J'avais l'habitude de savoir comment, mais j'ai oublié).
Salut Dick,
Habituellement, cela implique la suppression du "registre des modules" et la suppression des références à celui-ci dans le code. références à celui-ci dans le code. Si vous avez un vraiment module bien utilisé (comme un module avec des paramètres de configuration importés dans chaque module), alors vous aurez une étape supplémentaire pour le supprimer de chaque module. De plus, si vous avez utilisé "from psyco import ...", alors vous ne pourrez pas libérer le module et module et de la référence au module (est-ce qu'il provient de ce module ou est-il un troisième module ? voir "if paranoid : code ci-dessous).
La fonction ci-dessous supprime un module par son nom de l'interpréteur Python, la fonction paramètre "paranoïaque" est une liste de noms de variables à supprimer de tous les autres modules (censés être supprimés avec le module). Soyez TRES prudent avec le paramètre paramètre paranoid ; cela pourrait causer des problèmes à votre interpréteur si vos fonctions et classes portent le même nom dans différents modules. Un cas courant Une occurrence courante de ceci est "error" pour les exceptions. Beaucoup de bibliothèques ont une beaucoup de bibliothèques ont une exception "attrape-tout" appelée "error" dans le module. Si vous avez également nommé votre exception "error" et que vous décidez de l'inclure dans la liste paranoïaque... beaucoup d'autres objets d'exception.
def delete_module(modname, paranoid=None):
from sys import modules
try:
thismod = modules[modname]
except KeyError:
raise ValueError(modname)
these_symbols = dir(thismod)
if paranoid:
try:
paranoid[:] # sequence support
except:
raise ValueError('must supply a finite list for paranoid')
else:
these_symbols = paranoid[:]
del modules[modname]
for mod in modules.values():
try:
delattr(mod, modname)
except AttributeError:
pass
if paranoid:
for symbol in these_symbols:
if symbol[:2] == '__': # ignore special symbols
continue
try:
delattr(mod, symbol)
except AttributeError:
pass
Ensuite, vous devriez pouvoir l'utiliser comme ça :
delete_module('psyco')
ou
delete_module('psyco', ['Psycho', 'KillerError'])
# only delete these symbols from every other module
# (for "from psyco import Psycho, KillerError" statements)
-Arcege
8 votes
Il y a est pas de moyen propre de désimporter les modules. Tout ce que vous allez faire passe par des hacks.
0 votes
Obtenez des métadonnées en analysant le code à l'aide de la fonction
ast
au lieu de les importer, comme le font les outils tels que Epydoc , PyDoctor et Sphinx faire.