zipimport — 從 Zip 存檔匯入模組

原始碼: Lib/zipimport.py


此模組增加了從 ZIP 格式的存檔中匯入 Python 模組 (*.py, *.pyc) 和包的功能。通常不需要顯式使用 zipimport 模組;內建的 import 機制會自動將其用於作為 ZIP 存檔路徑的 sys.path 項。

通常,sys.path 是字串形式的目錄名稱列表。此模組還允許 sys.path 的項是命名 ZIP 檔案存檔的字串。ZIP 存檔可以包含支援包匯入的子目錄結構,並且可以指定存檔中的路徑,以僅從子目錄匯入。例如,路徑 example.zip/lib/ 將僅從存檔中的 lib/ 子目錄匯入。

任何檔案都可能存在於 ZIP 存檔中,但匯入器僅針對 .py.pyc 檔案呼叫。不允許對動態模組 (.pyd, .so) 進行 ZIP 匯入。請注意,如果存檔僅包含 .py 檔案,Python 將不會嘗試透過新增相應的 .pyc 檔案來修改存檔,這意味著如果 ZIP 存檔不包含 .pyc 檔案,則匯入可能會很慢。

在 3.13 版本中變更: 支援 ZIP64

在 3.8 版本中變更: 以前,不支援帶有存檔註釋的 ZIP 存檔。

另請參閱

PKZIP 應用程式說明

由該格式和演算法的建立者 Phil Katz 編寫的 ZIP 檔案格式文件。

PEP 273 - 從 Zip 存檔匯入模組

由 James C. Ahlstrom 編寫,他也提供了實現。Python 2.3 遵循 PEP 273 中的規範,但使用 Just van Rossum 編寫的實現,該實現使用 PEP 302 中描述的匯入鉤子。

importlib - 匯入機制的實現

為所有匯入器實現提供相關協議的包。

此模組定義了一個異常

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 目錄中查詢模組(如果該目錄存在)。

如果 archivepath 未指向有效的 ZIP 存檔,則會引發 ZipImportError

在 3.12 版本中變更: 3.10 中已棄用的方法 find_loader()find_module() 現在已刪除。請改用 find_spec()

create_module(spec)

importlib.abc.Loader.create_module() 的實現,返回 None 以顯式請求預設語義。

3.10 版本中新增。

exec_module(module)

importlib.abc.Loader.exec_module() 的實現。

3.10 版本中新增。

find_spec(fullname, target=None)

importlib.abc.PathEntryFinder.find_spec() 的實現。

3.10 版本中新增。

get_code(fullname)

返回指定模組的程式碼物件。如果模組無法匯入,則引發 ZipImportError

get_data(pathname)

返回與 pathname 關聯的資料。如果找不到檔案,則引發 OSError

在 3.3 版本中變更: 以前引發 IOError,現在它是 OSError 的別名。

get_filename(fullname)

如果匯入指定的模組,則返回 __file__ 將被設定為的值。如果模組無法匯入,則引發 ZipImportError

3.1 版本中新增。

get_source(fullname)

返回指定模組的原始碼。如果找不到模組,則引發 ZipImportError 異常;如果歸檔檔案中包含該模組,但沒有其原始碼,則返回 None

is_package(fullname)

如果由 fullname 指定的模組是一個包,則返回 True。如果找不到模組,則引發 ZipImportError 異常。

load_module(fullname)

載入由 fullname 指定的模組。fullname 必須是完全限定(點分隔)的模組名稱。成功時返回匯入的模組,失敗時引發 ZipImportError 異常。

自 3.10 版本起棄用: 請改用 exec_module()

invalidate_caches()

清除關於 ZIP 歸檔檔案中找到的檔案的內部資訊快取。

3.10 版本中新增。

archive

匯入器關聯的 ZIP 檔案的檔名,不包含可能的子路徑。

prefix

在 ZIP 檔案中搜索模組的子路徑。對於指向 ZIP 檔案根目錄的 zipimporter 物件,此為空字串。

archiveprefix 屬性與斜槓組合時,等於傳遞給 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'