インポートされるモジュールとロードされるモジュールの違いは、現在のモジュールの名前空間に配置されるものです。モジュールは (通常の状況では) 1 回だけロードされますが、さまざまな場所から何度でもインポートできます。ロードされたモジュールは、そこにインポートされていない場合、特定の名前空間でアクセスできない場合があります。たとえば、from module import name
構文を使用して、その名前でモジュールをインポートせずにモジュールをロードできます (指定された名前にアクセスできますが、モジュール自体にはアクセスできません)。
Python インタープリターによって内部的に使用されているため、辞書にos
モジュールが表示されているため、起動時に常に読み込まれます。sys.modules
ただし、名前空間に自動的にインポートされないため、「os」という名前を使用してアクセスすることはできません。
ただし、いくつかの方法で通常のインポート メカニズムをバイパスできます。たとえば、これを試してください:
import sys
os = sys.modules["os"]
os
行った場合と同様に、モジュールにアクセスできるようになりますimport os
。
これは、そのコードが、import
既にロードされているモジュールを要求したときにステートメントが行うこととまったく同じだからです。ただし、まだロードされていないモジュールで上記のコードを試すと、機能しません (sys.modules
辞書からキー エラーが返されます)。このimport
ステートメントは、現在のネームスペースに追加するだけでなく、新しいモジュールをロードします。モジュールを手動でロードし、通常のインポート システムをさらに回避することはできますが、そうする正当な理由はほとんどありません。