簡體   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