Python如何管理sys.modules?

时间:2013-03-14 14:54:52

标签: python module python-import

我想知道sys.modules字典的内容。例如,当我导入compiler包时:

>>> import compiler
>>> for k in sys.modules:
...     if k == 'compiler' or k.startswith('compiler.'):
...             print k
...
compiler.sys
compiler.ast
compiler.token
compiler
compiler.consts
compiler.warnings
compiler.transformer
compiler.struct
compiler.parser
compiler.symbol
compiler.imp
compiler.visitor
compiler.cStringIO
compiler.os
compiler.compiler
compiler.syntax
compiler.future
compiler.dis
compiler.pycodegen
compiler.misc
compiler.pyassem
compiler.types
compiler.symbols
compiler.marshal

为什么有compiler.warningscompiler.marshal这样的条目?它们不是compiler包的一部分,也不是模块的实际属性:

>>> for k in sys.modules:
...     if k.startswith('compiler.') and hasattr(compiler, k.split('.')[1]):
...             print k
...
compiler.ast
compiler.consts
compiler.warnings
compiler.transformer
compiler.visitor
compiler.syntax
compiler.future
compiler.pycodegen
compiler.misc
compiler.pyassem
compiler.symbols

包装内容为:

Windows explorer showing the contents of the compiler package

为什么sys.modules字典中的“额外项目”及其用途是什么?像marshal这样的模块不是compiler包的一部分,但以'compiler.'为前缀,我不明白为什么。此外,导入编译器包后,marshal中的sys.modules模块有一个条目。

sys.modules['marshal']
<module 'marshal' (built-in)>

注意:我随机选择了元帅,它可以作为任何模块的一般替代品。

0 个答案:

没有答案