为什么 Python 3 中 'sys.modules' 中没有导入的模块?
Why are modules that haven't been imported in 'sys.modules' in Python 3?
我正在阅读 ,说明似乎很清楚,请检查 sys.modules
中的模块。这与我在 Python 2 中预期的一样有效,但不适用于 Python 3(已测试 3.5 和 3.6)。例如:
Python 3.6
>>> import sys
>>> 'itertools' in sys.modules
True
Python 2.7
>>> import sys
>>> 'itertools' in sys.modules
False
我注意到,itertools
在 Python 3 sys.modules dict
(<module 'itertools' (built-in)>
) 中被描述为 'built-in',而不是在 Python 2 所以也许这就是为什么它在导入之前位于 sys.modules
,但它是 not listed as a built-in。无论如何,由于 itertools
仍然需要在 Python 3 中导入,我将不胜感激。
似乎在 Python 3 中,itertools 扩展实际上被编译到主 Python 二进制文件中,这与 Python 2 不同。如果您执行
import sys
然后是
'itertools' in sys.builtin_module_names
>> True
很清楚。在 Python 2.x 控制台中执行完全相同的步骤会导致 False
.
As per the docs, builtin_module_names
包含 'modules that are compiled into this Python interpreter'.
它们已经被导入,只是不是你导入的。究竟是解释器启动的哪些部分导致加载模块是不重要的实现细节,但如果需要,您可以追踪可能的路径。例如,itertools
由 reprlib
导入
from itertools import islice
由functools
导入:
from reprlib import recursive_repr
由types
导入:
import functools as _functools
由importlib
导入:
import types
它在解释器启动时被引导,因为它是大多数导入实现的地方。
我正在阅读 sys.modules
中的模块。这与我在 Python 2 中预期的一样有效,但不适用于 Python 3(已测试 3.5 和 3.6)。例如:
Python 3.6
>>> import sys
>>> 'itertools' in sys.modules
True
Python 2.7
>>> import sys
>>> 'itertools' in sys.modules
False
我注意到,itertools
在 Python 3 sys.modules dict
(<module 'itertools' (built-in)>
) 中被描述为 'built-in',而不是在 Python 2 所以也许这就是为什么它在导入之前位于 sys.modules
,但它是 not listed as a built-in。无论如何,由于 itertools
仍然需要在 Python 3 中导入,我将不胜感激。
似乎在 Python 3 中,itertools 扩展实际上被编译到主 Python 二进制文件中,这与 Python 2 不同。如果您执行
import sys
然后是
'itertools' in sys.builtin_module_names
>> True
很清楚。在 Python 2.x 控制台中执行完全相同的步骤会导致 False
.
As per the docs, builtin_module_names
包含 'modules that are compiled into this Python interpreter'.
它们已经被导入,只是不是你导入的。究竟是解释器启动的哪些部分导致加载模块是不重要的实现细节,但如果需要,您可以追踪可能的路径。例如,itertools
由 reprlib
from itertools import islice
由functools
导入:
from reprlib import recursive_repr
由types
导入:
import functools as _functools
由importlib
导入:
import types
它在解释器启动时被引导,因为它是大多数导入实现的地方。