Creo this post debería ayudarle a
edición: para asegurar la disponibilidad de esta información (en caso de que el enlace muere o algo similar) voy a incluir el mensaje original de la tutor mailing list aquí:
en 8/14/06, Dick Moores escribió:
en realidad, mi pregunta es, después de usar IDLE para hacer un poco de importación de módulos e inicialización de variables, cómo devolverlo a su condición inicial sin cerrarlo y volver a abrirlo.
Así, por ejemplo después de que he hecho
>>> import math, psyco
>>> a = 4**23
¿Cómo puedo eliminar los IDLE a cabo sin cerrar? (que solía conocer cómo, pero se me ha olvidado.)
Hola Dick,
lo general, esto implica la eliminación del "registro de módulo y la eliminación de referencias a él en el código. Si tiene un realmente módulo bien utilizado (como uno con parámetros de configuración importados en cada módulo), entonces tendrá un paso adicional de eliminarlo de cada módulo. Además, si tiene "uso de psico ... ", entonces no podrá liberar el módulo y la referencia al módulo e fácilmente (¿es de ese módulo o se importó de un tercer módulo? ver "si paranoide:. código de abajo)
Ésta función elimina un módulo por su nombre desde el intérprete de Python, el 'parámetro paranoica' es una lista de los nombres de las variables de eliminar de cualquier otro módulo de (supuestamente se va a eliminar con el módulo). Sea MUY cuidadoso con el parámetro paranoico , podría causar problemas para su intérprete si sus funciones y clases se llaman igual en diferentes módulos. Un evento común es "error" para las excepciones. las bibliotecas tienen una excepción de "catch-all" llamada "error" en el módulo.Si también denominó "error" a la excepción y decidió incluir eso en la lista de paranoicos ... hay que incluyen muchos otros objetos de excepción.
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
Entonces usted debe ser capaz de utilizar esto como:
delete_module('psyco')
o
delete_module('psyco', ['Psycho', 'KillerError'])
# only delete these symbols from every other module
# (for "from psyco import Psycho, KillerError" statements)
-Arcege
No hay una forma clara de eliminar módulos. Todo lo que vas a hacer es a través de hacks. –
Obtenga los metadatos analizando el código usando el módulo 'ast' en lugar de importarlos, como herramientas como [Epydoc] (http://epydoc.sf.net), [PyDoctor] (http://codespeak.net/~mwh/pydoctor /), y [Sphinx] (http://sphinx.pocoo.org) do. – Allen