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.warnings
やのようなエントリがあるのはなぜcompiler.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
そして、パッケージの内容は次のとおりです。
辞書に「余分な項目」があるのはなぜですか? また、そのsys.modules
目的は何ですか? のようなモジュールはパッケージmarshal
の一部ではありませんが、接頭辞が付いており、理由がわかりません。さらに、コンパイラパッケージをインポートした後にモジュールのエントリがあります。compiler
'compiler.'
marshal
sys.modules
sys.modules['marshal']
<module 'marshal' (built-in)>
注: マーシャルをランダムに選択しました。これは、任意のモジュールの一般的な代替品として機能します。