1. 最上位の構成単位
    1. プログラムのコードやデータの集合
    2. 繰り返し利用できる
    3. Pythonのプログラムファイル
  2. ステートメント
    1. import
      1. モジュール全体をインポート
    2. from
      1. あるモジュールの特定の「名前」のみをインポート
    3. reload
      1. セッションを停止せずにモジュールを再起動
  3. メリット
    1. 役割
      1. 構成単位
      2. 自己完結型の変数パッケージ
      3. 名前空間
    2. インポート
      1. 対象モジュールのグローバルスコープへのアクセスが可能になる
    3. コードの再利用
      1. 名前の定義を保存する
      2. 名前空間を分割
        1. モジュールは自己完結的である
        2. ある名前はモジュールの中でのみ有効
  4. 基本構造
    1. トップレベルファイルとモジュール
      1. トップレベルファイル
        1. 中心をなす1つのファイル
        2. プログラム処理の大きな流れ
        3. アプリケーションの起動
      2. 残りの補助的なファイル
        1. 狭義のモジュール
        2. トップレベルファイルで利用されるツールの集まり
        3. 属性
          1. 関数などモジュールに属するツール
          2. 特定の名前(変数)が割り当てられる
          3. インポートを通じて利用可能になる
    2. インポートと属性
      1. import(from)ステートメント
        1. プログラム実行時に他のファイルをロードし実行
        2. 実行されて初めてリンクされる
          1. コードに書かれているだけではリンクされない
        3. 使用されるモジュール名
          1. 役割
          2. ロードすべき外部ファイルの特定
          3. ロードさるモジュールを代入する変数
    3. 標準ライブラリモジュール
      1. Pythonにあらかじめ用意されている
  5. インポート処理
    1. 実行時に行われる
      1. 対象モジュールを探す
      2. モジュールのコンパイル(不要な場合もある)
      3. コードの実行とオブジェクトの生成
    2. 対象モジュールを探す
      1. モジュールサーチパス
        1. 自動で設定される
          1. プログラムのホームディレクトリ
          2. トップレベルファイルの置かれているディレクトリ
          3. 環境変数 PYTHONPATH ディレクトリ
          4. 標準ライブラリモジュールのディレクトリ
          5. .pthファイルの内容
          6. .pthという拡張子のテキストファイル
          7. 1行に1つずつディレクトリを列挙
        2. sys.path属性
          1. 標準ライブラリ
          2. 先頭はかならずホームディレクトリとなる
          3. 値を更新すれば、実行時にサーチパスをカスタマイズ可能
          4. sys.path.append(dirname)
        3. サードパーティエクステンション
          1. distutils
          2. 標準ライブラリ
          3. 自動的にインストール
          4. パスの設定は不要
          5. インストールするためのスクリプト setup.py
          6. distutilsをインポートし、利用してモジュールをサーチパスに配置する
      2. 対象ファイル
        1. importでは拡張子(.py)等を指定しない
        2. 種類
          1. .py : ソースファイル
          2. .pyc : バイトコードファイル
          3. ディレクトリ
          4. .so、.dll、pyd : コンパイル済みエクステンションモジュール
          5. zipファイルのコンポーネント
          6. Cで書かれたコンパイル済みビルトインモジュール
          7. JythonのJavaクラス
          8. IronPythonの.NETコンポーネント
      3. 処理の内容を変える
        1. インポートフック
          1. zipアーカイブからファイルをロード
          2. 暗号化データをインポート時に復号
          3. __import__
          4. ビルトイン関数
          5. カスタマイズ可能
    3. モジュールのコンパイル
      1. 必要かどうかはファイルのタイムスタンプにより判断
      2. バイトコードはインポート時に作成される
        1. プログラムを実行してもトップレベルのバイトコードファイルは作成されない
    4. コードの実行
      1. コードが実行されモジュールオブジェクトが生成される
        1. コードの内容によっては、インポートの時点で何らかの結果が得られる場合もある
        2. 複雑な処理
          1. 1つのプロセスで2回以上インポートされることはない
          2. 必要時にメモリ上のモジュールを再利用
          3. 再度明示的にインポートしたい場合、reloadを利用する
          4. ロード済みのモジュールは、sys.modules に保持される