如何取消导入Python模块?

如何取消导入Python模块?,第1张

如何取消导入Python模块

我认为这篇文章应该对您有帮助

编辑:为了确保此信息的可用性(如果链接消失或类似原因),我将在此处包括来自教师邮件列表的原始消息:


Dick Moores在2006年8月14日写道:

实际上,我的问题是,在使用IDLE进行模块的一些导入和变量的初始化之后,如何将其返回到其初始状态而不关闭并重新打开它。

因此,例如,在我完成之后

>>> import math, psyco>>> a = 4**23

我如何清除这些而不关闭IDLE?(我曾经知道如何,但是我已经忘记了。)

嗨,迪克,

通常,这需要从“模块注册表”中删除并在代码中删除对其的引用。如果您有一个使用 得很
好的模块(例如将配置参数导入到每个模块中的模块),那么您将有一个额外的步骤将其从同样,如果您使用了“ from psyco import
…”,那么您将无法轻松释放该模块以及对该模块的引用(是从该模块导入,还是从第三个模块导入?请参阅“如果偏执狂:下面的代码)。

下面的函数从Python解释器中按名称删除模块,“
paranoid”参数是要从其他所有模块中删除的变量名的列表(假定已与该模块一起删除)。对偏执的参数要非常小心;如果您的函数和类在不同的模块中被命名为相同的名称,则可能会对解释器造成问题。一种常见的情况是例外情况下的“错误”。许多库在模块中都有一个称为“错误”的“包罗万象”异常。如果您也将异常命名为“错误”并决定将其包括在偏执狂列表中,那么……还有很多其他异常对象。

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

然后,您应该可以像这样使用它:

delete_module('psyco')

要么

delete_module('psyco', ['Psycho', 'KillerError'])# only delete these symbols from every other module# (for "from psyco import Psycho, KillerError" statements)

-弓箭



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5644786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存