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.8 版更改: 以前,不支持带有档案注释的 ZIP 档案。
参见
- PKZIP Application Note
- Phil Katz 编写的 ZIP 文件格式文档,此格式和使用的算法的创建者。 
- PEP 273 - 从 ZIP 压缩包导入模块
- 由 James C. Ahlstrom 编写,他也提供了实现。 Python 2.3 遵循 PEP 273 的规范,但是使用 Just van Rossum 编写的使用了 PEP 302 中描述的导入钩的实现。 
- PEP 302 - 新导入钩
- The PEP to add the import hooks that help this module work. 
此模块定义了一个异常:
- 
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。- 
find_module(fullname[, path])¶
- 搜索由 fullname 指定的模块。 fullname 必须是完全合格的(点分的)模块名。它返回 zipimporter 实例本身如果模块被找到,或者返回 - None如果没找到指定模块。可选的 path 被忽略,这是为了与导入器协议兼容。
 - 
get_code(fullname)¶
- Return the code object for the specified module. Raise - ZipImportErrorif the module couldn't be found.
 - 
get_filename(fullname)¶
- Return the value - __file__would be set to if the specified module was imported. Raise- ZipImportErrorif the module couldn't be found.- 3.1 新版功能. 
 - 
get_source(fullname)¶
- 返回指定模块的源代码。如果没有找到模块则引发 - ZipImportError,如果档案包含模块但是没有源代码,返回- None。
 - 
is_package(fullname)¶
- 如果由 fullname 指定的模块是一个包则返回 - True。如果不能找到模块则引发- ZipImportError错误。
 - 
load_module(fullname)¶
- Load the module specified by fullname. fullname must be the fully qualified (dotted) module name. It returns the imported module, or raises - ZipImportErrorif it wasn't found.
 - 
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'