在参考手册中指出:
我不确定这里的“初始化”应该是什么意思。之前我总是认为如果一个模块已经加载并存在于完整的Python程序在一个最小初始化的环境中执行:所有内置和标准模块都可用,但没有被初始化,除了
sys
(各种系统服务)、builtins
(内置函数、异常和None)和__main__
。
sys.modules
中,则该模块已被初始化:
显然,我错了,因为这是一个将模块名称映射到已加载的模块的字典。
sys.modules
包含许多其他模块:python -c "import sys; print(sys.modules.keys() - {'sys', 'builtins', '__main__'})"
{'_stat', 'encodings.aliases', '_sitebuiltins', '_thread', 'io', '_weakrefset', 'genericpath', 'encodings.utf_8', 'codecs', 'os', '_weakref', '_codecs', '_frozen_importlib', '_io', '_frozen_importlib_external', 'os.path', '_warnings', '_bootlocale', '_signal', 'errno', '_imp', 'encodings.latin_1', 'sysconfig', 'marshal', 'encodings', 'usercustomize', 'site', 'posixpath', '_collections_abc', 'posix', '_sysconfigdata_m_linux_x86_64-linux-gnu', 'encodings.cp437', 'abc', 'zipimport', 'stat', '_locale'}
初始化模块和加载模块有什么区别?我使用的是Python 3。
import
相关联,特别是对于module.__spec__
,而该文档最近已经更新。 - Bob Holversys.modules
包含尚未按照导入系统文档中使用该术语的意义完全加载的模块。 - user2357112