【发布时间】:2010-12-29 19:52:15
【问题描述】:
导入标准的“日志”模块会用一堆虚拟条目污染 sys.modules:
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
>>> import sys
>>> import logging
>>> sorted(x for x in sys.modules.keys() if 'log' in x)
['logging', 'logging.atexit', 'logging.cStringIO', 'logging.codecs',
'logging.os', 'logging.string', 'logging.sys', 'logging.thread',
'logging.threading', 'logging.time', 'logging.traceback', 'logging.types']
# and perhaps even more surprising:
>>> import traceback
>>> traceback is sys.modules['logging.traceback']
False
>>> sys.modules['logging.traceback'] is None
True
所以导入这个包会将额外的名称放入 sys.modules 中,除了它们不是模块,只是对 None 的引用。其他模块(例如 xml.dom 和编码)也有这个问题。为什么?
编辑:基于 bobince 的回答,有页面描述了 the origin(参见“sys.modules 中的虚拟条目”部分)和 future 的功能。
【问题讨论】:
-
很好的链接...我实际上并没有发现这在任何地方都有记录。显然出于某种原因,我没有搜索明显的标题“说 Neeeow ... Wum ... Ping 的骑士”。啊,Python……
-
我要发布一个完全相同的副本 - 我今天的第二个:P