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

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

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

ソースコード: :source: `Lib / zipimport.py`



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

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

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

バージョン3.8で変更:以前は、アーカイブコメント付きのZIPアーカイブはサポートされていませんでした。


も参照してください

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


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

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

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)

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

バージョン3.3で変更: OSError の代わりに IOError が発生していました。

get_filename(fullname)

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

バージョン3.1の新機能。

get_source(fullname)

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

is_package(fullname)

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

load_module(fullname)

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

archive

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

prefix

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

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


これは、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'