我正在尝试确定加载了哪些 python 系统模块:
In [1]: import sys
In [2]: l = sorted(list(sys.modules.keys()))
In [3]: 'json' in l
Out[3]: True
根据文档:
这是一个将模块名称映射到已加载模块的字典。
所以我认为也许是 sys
进口的json
,但结果却是错误的:
In [4]: json.dumps({'oren': 12})
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 json.dumps({'oren': 12})
NameError: name 'json' is not defined
我错过了什么?
sys.modules
列出已加载到当前解释器进程中的每个模块。值得注意的是,它不仅列出“系统”模块,还列出每个已加载的模块 - 无论是核心模块还是第三方模块。它也不会列出模块,直到它们被加载(通常通过其他已加载模块中的 import 语句)。这与通过语句导入到当前范围的名称列表不同
import
。只有已导入的名称才可直接使用。导入语句可以从模块导入特定名称(例如from json import dumps
)和/或重命名导入(例如import json as j
)。这两者都反映在与导入语句的范围相对应的本地符号表中,但不反映在 sys.modules 中 - 在这两种情况下,只有模块json
才会出现在 sys.modules 中。如果您想知道当前作用域可以访问什么,请尝试该
vars()
函数。这将列出作用域内的每个名称,包括导入的名称。如果您想知道 Python 附带了哪些模块,最好的办法是查阅文档。您可以检查 Python 发行版附带的 lib/python3.x 目录,但这并不完整(省略了一些内置模块),并且会包含许多仅供内部使用的模块。