バージョン 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 ファイルが置き換えられてしまうことになり、あまり起こりそうにない状況だからです。
参考
このモジュールでは例外を一つ定義しています:
zipimporter オブジェクトが送出する例外です。 ImportError のサブクラスなので、 ImportError としても捕捉できます。
zipimporter は ZIP ファイルを import するためのクラスです。
新たな zipimporter インスタンスを生成します。 archivepath は ZIP ファイルへのパスかまたは ZIP ファイル中の特定のパスへのパスでなければなりません。 たとえば、 foo/bar.zip/lib という archivepath の場合、 foo/bar.zip という ZIP ファイル(が存在するものとして)の中の lib ディレクトリにあるモジュールを探しに行きます。 archivepath が有効な ZIP アーカイブを指していない場合、 ZipImportError を送出します。
fullname に指定したモジュールを検索します。 fullname は完全指定の (ドット表記の) モジュール名でなければなりません。 モジュールが見つかった場合には zipimporter インスタンス自体を返し、 そうでない場合には None を返します。 path 引数は無視されます — この引数は importer プロトコルとの互換性を保つためのものです。
fullname に指定したモジュールのコードオブジェクトを返します。 モジュールがない場合には ZipImportError を送出します。
fullname に指定したモジュールのソースコードを返します。 モジュールが見つからなかった場合には ZipImportError を送出します。 モジュールは存在するが、ソースコードがない場合には None を返します。
fullname で指定されたモジュールがパッケージの場合に True を返します。 モジュールが見つからなかった場合には ZipImportError を送出します。
fullname に指定したモジュールをロードします。 fullname は完全指定の (ドット表記の) モジュール名でなくてはなりません。 import 済みのモジュールを返します。 モジュールがない場合には ZipImportError を送出します。
importer に紐付けられた ZIP ファイルのファイル名で、サブパスは含まれません。
ZIP ファイル中のモジュールを検索するサブパスです。 この文字列は ZIP ファイルの根を指している zipimporter オブジェクトでは空です。
アトリビュート archive と prefix とは、スラッシュでつなげると、 zipimporter コンストラクタに渡された元々の archivepath 引数と等しくなります。
モジュールを ZIP アーカイブから import する例を以下に示します - zipimport モジュールが明示的に使われていないことに注意してください。
$ unzip -l /tmp/example.zip
Archive: /tmp/example.zip
Length Date Time Name
-------- ---- ---- ----
8467 11-26-02 22:30 jwzthreading.py
-------- -------
8467 1 file
$ ./python
Python 2.3 (#1, Aug 1 2003, 19:54:32)
>>> import sys
>>> sys.path.insert(0, '/tmp/example.zip') # パス先頭に .zip ファイル追加
>>> import jwzthreading
>>> jwzthreading.__file__
'/tmp/example.zip/jwzthreading.py'