【发布时间】:2017-07-07 10:33:41
【问题描述】:
我正在阅读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 中,所以也许这就是它在导入之前在 sys.modules 中的原因,但它是not listed as a built-in。无论如何,由于itertools 仍然需要在 Python 3 中导入,我将不胜感激。
【问题讨论】:
-
如果您已经导入的任何模块需要导入它们自己的模块,这些模块将显示为已加载。也许 Python 3 中引入了 Python 2 中不存在的依赖项。即使加载了一个模块,您也需要
import使其在当前范围内可用。 -
我想你自己已经回答了这个问题:如果
itertools已成为内置函数,它将在解释器启动时立即加载。 -
是为什么
itertools需要导入的问题,或者为什么它存在并且没有在文档中这样列出? -
@ForceBru:不,内置模块并非在启动时全部加载。您可以通过在新的解释器中比较
sys.builtin_module_names和sys.modules来检查这一点。 -
@JimFasarakis-Hilliard 问题是为什么
itertools(和我测试过的其他一些模块)在被导入到 Python 3 而不是 Python 2 之前在sys.modules中
标签: python python-2.7 python-3.x import python-import