Skip to main content
 首页 » 编程设计

python之import -force mymodule 用于 python 3.6+

2025年05月04日7arxive

有没有办法在 python 3.6+ 中执行此操作?

import -force mymodule 

我只想要一个 python 命令:

(1) 第一次加载模块,

(2) 如果模块已经加载且没有 barfing,则强制重新加载模块。

(这不是一个重复的问题,因为我要求的是不同的东西。我想要的是一个函数调用,它将执行上面的项目(1)和(2)作为相同的函数调用。我不想要手动做出关于我是否可以发出“import”或“imp.reload”的编码决定。我只想要一个函数“def”的 python 代码,它可以检测哪种情况是合适的并自动继续为我做出决定如何导入它,(1) 或 (2)。

我认为它是这样的:

def import_force(m): 
    import sys 
    if m not in sys.modules: 
        import m 
    else: 
        import importlib 
        importlib.reload(m) 

除此之外,我不知道如何将模块名称作为参数传递。只是给我一个错误,没有名为“m”的模块

请您参考如下方法:

您在新答案中半纠正了一个遗漏的步骤,即您需要在每个使用它的范围内分配新模块。最简单的方法是返回模块对象并将其绑定(bind)到函数外部所需的名称。您最初的实现 90% 正确:

import sys, importlib 
 
def import_force(m): 
    if m not in sys.modules: 
        return __import__(m) 
    else: 
        return importlib.reload(sys.modules[m]) 

现在您可以从命令行使用此功能来替换import,例如:

my_module = force_import('my_module') 

任何时候当您发现自己使用 exec 来执行一项任务时,已经有如此多定义明确的机制可用,您就会闻到代码的味道。也没有理由每次都重新导入 sys 和 importlib。