# 4.12 `zipimport` -- Zip アーカイブからモジュールを import する

バージョン2.3 以降で新規追加された 仕様です。

このモジュールは， Python モジュール (*.py，*.py[co] やパッケージを ZIP 形式のアーカイブから import できるように します。通常，`zipimport` を明示的に使う必要はありません; 組み込みの `import` は，`sys.path` の要素が ZIP アーカイブへのパスを指している場合にこのモジュールを自動的に 使います。

普通，`sys.path` はディレクトリ名の文字列からなるリストです。 このモジュールを使うと，`sys.path` の要素に ZIP ファイル アーカイブを示す文字列を使えるようになります。ZIP アーカイブには サブディレクトリ構造を含めることができ，パッケージの import を サポートさせしたり，アーカイブ内のパスを指定してサブディレクトリ 下から import を行わせたりできます。例えば， /tmp/example.zip/lib/ のように指定すると，アーカイブ中の lib/ サブディレクトリ下だけから import を行います。

ZIP アーカイブ内にはどんなファイルを置いてもかまいませんが， import できるのは.py および .py[co] だけです。 動的モジュール (.pyd，.so) の ZIP import は行えません。 アーカイブ内に .py ファイルしか入っていない場合， Python がアーカイブを変更して， .py ファイルに対応する .pyc や.pyo ファイルを追加したりはしません。 つまり，ZIP アーカイブ中に .pyc が入っていない 場合， import はやや低速になるかもしれないので注意してください。

ZIP アーカイブからロードしたモジュールに対して組み込み関数 `reload()` を呼び出すと失敗します; `reload()` が 必要になるということは，実行時に ZIPファイルが置き換えられてしまう ことになり，あまり起こりそうにない状況だからです。

このモジュールで使える属性を以下に示します:

exception `ZipImporterError`
  zipimporter オブジェクトが送出する例外です。 `ImportError` のサブクラスなので，`ImportError` としても捕捉できます。

class `zipimporter`
  ZIP ファイルを import するためのクラスです。 コンストラクタの詳細は ``zipimporter オブジェクト'' (4.12.1 節) を参照してください。

参考資料:

PKZIP Application Note
  ZIP ファイル形式の作者であり，ZIP で使われて いるアルゴリズムの作者でもある Phil Katz による，ZIP ファイル形式 についてのドキュメントです。

PEP 0273, Import Modules from Zip Archives
  このモジュールの実装も行った、James C. Ahlstrom による PEP です。 Python 2.3 は PEP 273 の仕様に従っていますが、 Just van Rossum の書いた import フックによる実装を使っています。 import フックは PEP 302 で解説されています。

PEP 0302, New Import Hooks
  このモジュールを動作させる助けに なっている import フックの追加を提案している PEP です。