sys.modules 去哪儿了?

问题描述 投票:0回答:1
>>> import sys
>>> del sys.modules['sys']
>>> import sys
>>> sys.modules
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute 'modules'

为什么重新导入的

sys
模块不再有一些属性了?

我使用的是 Python 3.12.3,它发生在 macOS、Linux 和 Windows 中。它发生在 REPL 和 .py 脚本中。在 Python 3.11 中不会发生这种情况。

python python-3.12
1个回答
0
投票

sys
模块无法像普通内置模块一样初始化,因为它负责许多特殊功能。相反,在解释器启动时,Python 使用特殊函数
sys
 创建 
_PySys_Create
模块。此函数负责(部分工作)正确设置
sys
模块,包括
sys.modules
属性:

    if (PyDict_SetItemString(sysdict, "modules", modules) < 0) {
        goto error;
    }

当您执行

del sys.modules['sys']
时,导入系统将失去对
sys
模块的跟踪。当您尝试再次导入它时,Python 会尝试创建一个全新的
sys
模块,并且这样做就像
sys
是普通的内置模块一样。它完成了初始化普通内置模块的过程。此过程使新的
sys
模块处于不一致、不正确的初始化状态,因为
sys
从未设计为以这种方式初始化。

© www.soinside.com 2019 - 2024. All rights reserved.