我想跟踪导入模块时正在执行哪些导入。(目标是禁止导入有害模块,但这不是这个问题的重点。)出于 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_module
在 Python ≤ 3.7 中,这可以按预期工作并打印my_module
以及所有my_module
导入的模块(以及递归这些模块导入的所有模块)。但是,在 Python 3.8.0 中,即使 my_module
没有导入任何内容,我也会得到以下输出:
my_module
_io
_io
两条_io
线从何而来?我试过查看文档,但找不到任何有用的东西。