31.4. zipimport — Zipアーカイブからモジュールをインポートします—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/zipimport
移動先:案内検索

31.4。 zipimport —Zipアーカイブからモジュールをインポートします

バージョン2.3の新機能。


このモジュールは、Pythonモジュール(*.py*.py[co])およびパッケージをZIP形式のアーカイブからインポートする機能を追加します。 通常、 zipimport モジュールを明示的に使用する必要はありません。 これは、ZIPアーカイブへのパスである sys.path アイテムに対して、組み込みの import メカニズムによって自動的に使用されます。

通常、 sys.path は、文字列としてのディレクトリ名のリストです。 このモジュールでは、 sys.path のアイテムをZIPファイルアーカイブに名前を付ける文字列にすることもできます。 ZIPアーカイブには、パッケージのインポートをサポートするサブディレクトリ構造を含めることができ、アーカイブ内のパスは、サブディレクトリからのみインポートするように指定できます。 たとえば、パスexample.zip/lib/は、アーカイブ内のlib/サブディレクトリからのみインポートされます。

どのファイルもZIPアーカイブに存在する可能性がありますが、インポートできるのはファイル.py.py[co]のみです。 動的モジュール(.pyd.so)のZIPインポートは許可されていません。 アーカイブに.pyファイルのみが含まれている場合、Pythonは対応する.pycまたは.pyoファイルを追加してアーカイブを変更しようとしないことに注意してください。つまり、ZIPアーカイブに.pycファイルが含まれている場合、インポートがかなり遅くなる可能性があります。

組み込みの reload()関数を使用すると、ZIPアーカイブからロードされたモジュールで呼び出された場合に失敗します。 reload()が必要になる可能性はほとんどありません。これは、実行時にZIPが変更されたことを意味するためです。

アーカイブコメント付きのZIPアーカイブは現在サポートされていません。

も参照してください

PKZIPアプリケーションノート
使用されたフォーマットとアルゴリズムの作成者であるPhilKatzによるZIPファイルフォーマットに関するドキュメント。
PEP 273 -Zipアーカイブからモジュールをインポートします
ジェームズCによって書かれました。 実装も提供したAhlstrom。 Python2.3はPEP273の仕様に従いますが、PEP302で説明されているインポートフックを使用するJustvanRossumによって作成された実装を使用します。
PEP 302 -新しいインポートフック
このモジュールの動作を支援するインポートフックを追加するためのPEP。


このモジュールは例外を定義します:

exception zipimport.ZipImportError
zipimporterオブジェクトによって発生した例外。 ImportErrorのサブクラスなので、ImportErrorとしてもキャッチできます。

31.4.1。 zipimporterオブジェクト

zipimporter は、ZIPファイルをインポートするためのクラスです。

class zipimport.zipimporter(archivepath)

新しいzipimporterインスタンスを作成します。 archivepath は、ZIPファイルへのパス、またはZIPファイル内の特定のパスである必要があります。 たとえば、foo/bar.zip/libarchivepath は、ZIPファイルfoo/bar.zip内のlibディレクトリでモジュールを検索します(存在する場合)。

ZipImportError は、 archivepath が有効なZIPアーカイブを指していない場合に発生します。

find_module(fullname[, path])

フルネームで指定されたモジュールを検索します。 フルネームは、完全修飾(点線)モジュール名である必要があります。 モジュールが見つかった場合はzipimporterインスタンス自体を返し、見つからなかった場合は None を返します。 オプションの path 引数は無視されます。これは、インポータープロトコルとの互換性のためにあります。

get_code(fullname)

指定されたモジュールのコードオブジェクトを返します。 モジュールが見つからなかった場合は、 ZipImportError を発生させます。

get_data(pathname)

パス名に関連付けられているデータを返します。 ファイルが見つからなかった場合は、IOErrorを上げます。

get_filename(fullname)

指定されたモジュールがインポートされた場合に設定される値__file__を返します。 モジュールが見つからなかった場合は、 ZipImportError を発生させます。

バージョン2.7の新機能。

get_source(fullname)

指定されたモジュールのソースコードを返します。 モジュールが見つからなかった場合は ZipImportError を発生させ、アーカイブにモジュールが含まれているがソースがない場合は None を返します。

is_package(fullname)

フルネームで指定されたモジュールがパッケージの場合は、Trueを返します。 モジュールが見つからなかった場合は、 ZipImportError を発生させます。

load_module(fullname)

フルネームで指定されたモジュールをロードします。 フルネームは、完全修飾(点線)モジュール名である必要があります。 インポートされたモジュールを返すか、見つからなかった場合は ZipImportError を発生させます。

archive

インポーターに関連付けられたZIPファイルのファイル名。サブパスの可能性はありません。

prefix

モジュールが検索されるZIPファイル内のサブパス。 これは、ZIPファイルのルートを指すzipimporterオブジェクトの空の文字列です。

archive および prefix 属性は、スラッシュと組み合わせると、 zipimporter コンストラクターに指定された元の archivepath 引数と等しくなります。


31.4.2。 例

これは、ZIPアーカイブからモジュールをインポートする例です。 zipimport モジュールは明示的に使用されていないことに注意してください。

$ unzip -l example.zip
Archive:  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, 'example.zip')  # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'example.zip/jwzthreading.py'