sys.modules是用于 规范 数据结构的 Python可访问引用
,用于跟踪导入了哪些模块。从该词典中删除名称意味着将来尝试导入该模块将导致Python从头开始加载该模块。 __
换句话说,每当您使用一条
import语句时,Python要做的第一件事就是检查
sys.modules引用的字典是否已经有该模块的条目,然后继续下一步(绑定当前名称空间中的名称),而无需先加载该模块。如果您从中删除条目
sys.modules,则Python将找不到已加载的模块,然后再次加载。
请注意此处有关 Python可访问性
的谨慎措辞。实际的字典存在于Python堆中,
sys.modules并且只是对其的一种引用。您通过分配给来将该引用 替换
为另一本词典
sys.modules。但是,口译员对此有 更多的参考
;它们只是无法从Python代码
ctypes访问,反正不是没有技巧才能访问C-API。
请注意,这已 明确记录在案 :
但是,替换字典不一定能按预期工作,并且从字典中删除必要项目可能会导致Python失败。
从C-API,您必须使用
PyThreadState_Get()->interp->modules获取对字典的内部引用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)