zipimport — 從Zip存檔匯入模組¶
原始碼: Lib/zipimport.py
這個模組增加了從ZIP格式的存檔中匯入Python模組(*.py、*.pyc)和包的功能。通常不需要顯式使用zipimport模組;對於sys.path中指向ZIP存檔的項,它會被內建的import機制自動使用。
通常,sys.path是一個由字串表示的目錄名列表。此模組還允許sys.path中的項是一個命名ZIP檔案存檔的字串。ZIP存檔可以包含一個子目錄結構以支援包匯入,並且可以指定存檔內的路徑以僅從子目錄匯入。例如,路徑example.zip/lib/將只從存檔內的lib/子目錄匯入。
ZIP存檔中可以存在任何檔案,但僅對.py和.pyc檔案呼叫匯入器。禁止ZIP匯入動態模組(.pyd, .so)。請注意,如果存檔僅包含.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 檔案內特定路徑的路徑。例如,*archivepath* 為
foo/bar.zip/lib將在 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 版本開始已棄用,並將在 3.15 版本中移除: 請改用
exec_module()。
- invalidate_caches()¶
清除內部快取中關於 ZIP 存檔中找到的檔案的資訊。
在 3.10 版本加入。
- archive¶
匯入器關聯的 ZIP 檔案的檔名,不帶可能的子路徑。
- prefix¶
在 ZIP 檔案中搜索模組的子路徑。對於指向 ZIP 檔案根目錄的 zipimporter 物件,這是一個空字串。
archive和prefix屬性,當與斜槓結合時,等於提供給zipimporter建構函式的原始 *archivepath* 引數。
示例¶
這是一個從 ZIP 存檔匯入模組的示例——請注意 zipimport 模組並未被顯式使用。
$ unzip -l example_archive.zip
Archive: example_archive.zip
Length Date Time Name
-------- ---- ---- ----
8467 01-01-00 12:30 example.py
-------- -------
8467 1 file
>>> import sys
>>> # Add the archive to the front of the module search path
>>> sys.path.insert(0, 'example_archive.zip')
>>> import example
>>> example.__file__
'example_archive.zip/example.py'