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