有没有办法在 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。
