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/lib
的 archivepath 將在 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_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 物件,此為空字串。
當
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'