繁体   English   中英

为什么未在Python 3的“ sys.modules”中导入模块?

[英]Why are modules that haven't been imported in 'sys.modules' in Python 3?

我正在阅读如何检查是否已导入python模块 ,并且说明似乎很清楚,请在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中,所以也许这就是它在sys.modules中的原因在导入之前,但未作为内置项列出 无论如何,由于itertools仍然需要在Python 3中导入,因此我很感谢您提供一个解释。

它们被导入,只是不是您导入的。 解释器启动的确切原因是导致模块加载的是不重要的实现详细信息,但是您可以根据需要跟踪可能的路径。 例如, itertoolsreprlib导入

from itertools import islice

这是由functools导入的:

from reprlib import recursive_repr

通过types导入:

import functools as _functools

这是由importlib导入的:

import types

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

看来在Python 3中,itertools扩展实际上是编译为Python 2中的主要二进制文件,这与Python 2不同。

import sys

然后一个

'itertools' in sys.builtin_module_names
>> True

很明显。 在Python 2.x控制台中执行完全相同的步骤会导致False

根据文档builtin_module_names包含“已编译到此Python解释器的模块”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM