Python3.8在导入任何内容时都会导入io
我想在导入模块时跟踪正在进行的导入。(目标是禁止进口有害模块,但这不是问题的重点。)对于MCVE目的,假设我这样做:Python3.8在导入任何内容时都会导入io,python,python-3.8,Python,Python 3.8,我想在导入模块时跟踪正在进行的导入。(目标是禁止进口有害模块,但这不是问题的重点。)对于MCVE目的,假设我这样做: import builtins orig_import = builtins.__import__ def new_import(*args, **kwargs): print(args[0]) return orig_import(*args, **kwargs) builtins.__import__ = new_import import my_m
import builtins
orig_import = builtins.__import__
def new_import(*args, **kwargs):
print(args[0])
return orig_import(*args, **kwargs)
builtins.__import__ = new_import
import my_module
用Python≤ 3.7,它按预期工作,并打印my_模块
以及导入的所有模块(以及这些模块导入的所有模块)。但是,在Python 3.8.0中,即使my_模块
没有导入任何内容,我也会得到以下输出:
my_module
_io
_io
这两行代码是从哪里来的?我试着查看文档,但找不到任何有用的东西。打印
args[1]['''.\u name\u'.]
显示模块\u io
实际上被称为\u freezed\u importlib\u external
。但我不知道该怎么办。几个小时前,我在模拟某个模块函数时看到了一个3.8行为很有趣的问题,可能是相关的?