31.1. zipimport — 从 Zip 存档中导入模块
通常, 是字符串的目录名称列表。此模块同样允许 sys.path 的一项成为命名 ZIP 文件档案的字符串。 ZIP 档案可以容纳子目录结构去支持包的导入,并且可以将归档文件中的路径指定为仅从子目录导入。比如说,路径 example.zip/lib/
将只会从档案中的 lib/
子目录导入。
任何文件都可以存在于 ZIP档案之中,但是只有 .py
和 .pyc
文件是能够导入的。不允许导入 ZIP 中的动态模组( .pyd
, .so
)。请注意,如果档案中只包含 .py
文件, Python不会尝试通过添加对应的 文件修改档案,意思是如果 ZIP 档案不包含 .pyc
文件,导入或许会变慢。
目前不支持带有档案注释的 ZIP 归档。
参见
Phil Katz 编写的 ZIP 文件格式文档,此格式和使用的算法的创建者。
PEP 273 - 从ZIP压缩包导入模块
由 James C. Ahlstrom 编写,他还提供了一个具体实现。 Python 2.3 遵循 PEP 273 的规范,但使用了一个由 van Rossum 本人所编写的实现,该实现使用了 PEP 302 所描述的导入钩子。
- 新导入钩
PEP 添加导入钩来有助于模块运作。
此模块定义了一个异常:
exception zipimport.ZipImportError
zipimporter 是用于导入 ZIP 文件的类。
class zipimport.zipimporter
(archivepath)
创建新的 zipimporter 实例。 archivepath 必须是指向 ZIP 文件的路径,或者 ZIP 文件中的特定路径。例如, foo/bar.zip/lib
的 archivepath 将在 ZIP 文件 foo/bar.zip
中的 lib
目录中查找模块。
如果 archivepath 没有指向一个有效的 ZIP 档案,引发 。
find_module
(fullname[, path])搜索由 fullname 指定的模块。 fullname 必须是完全合格的(含加点作分割的拓展名)模块名。它返回 zipimporter 实例本身如果模块被找到,或者返回 None 如果没找到指定模块。可选的 path 被忽略,这是为了与导入器协议兼容。
(pathname)
返回与 pathname 相关联的数据。如果不能找到文件则引发 错误。
在 3.3 版更改: IOError 代替 被引发。
get_filename
(fullname)3.1 新版功能.
get_source
(fullname)返回指定模块的源代码。如果没有找到模块则引发 ZipImportError ,如果档案包含模块但是没有源代码,返回 。
load_module
(fullname)加载由 fullname 指定的模块。 fullname 必须是完全合格的(含加点作为分割的拓展名)模块名。它返回已加载模块,或者当找不到模块时引发 ZipImportError 错误。
archive
导入器关联的 ZIP 文件的文件名,不含可能的子路径。
prefix
ZIP 文件中搜索的模块的子路径。这是一个指向 ZIP 文件 根目录的 zipimporter 对象的空字符串。
当与斜杠结合使用时, 和 prefix 属性等价于赋予 构造器的原始 archivepath 参数。