为什么在Python 3中的'sys.modules'中没有导入模块?

时间:2017-02-17 19:13:26

标签: python python-2.7 python-3.x import python-import

我正在阅读how to check if a python module has been imported,说明似乎很清楚,请检查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)>)中被描述为“内置”,而不是在Python 2中,所以也许这就是为什么它在{在导入之前{1}},但它是not listed as a built-in。无论如何,由于sys.modules仍然需要在Python 3中导入,我将不胜感激解释。

2 个答案:

答案 0 :(得分:7)

他们已导入,而不是您。解释器启动的哪些部分导致模块加载是不重要的实现细节,但是如果需要,可以跟踪可能的路径。例如,itertools导入from itertools import islice

from reprlib import recursive_repr

reprlib导入:

import functools as _functools

functools导入:

import types

types导入:

SERVICE

是在解释器启动时引导的,因为它是大多数导入实现的地方。

答案 1 :(得分:-1)

似乎在Python 3中,itertools扩展实际上被编译成主要的Python二进制文件,与Python 2不同。如果你做了

import sys

然后是

'itertools' in sys.builtin_module_names
>> True
很明显。在Python 2.x控制台中执行完全相同的步骤会产生False

Fiddlebuiltin_module_names包含编译到此Python解释器中的&#39;