On this page
31.4. zipimport-从 Zip 存档导入模块
2.3 版的新Function。
该模块增加了从 ZIP 格式 Files 中导入 Python 模块(*.py
,*.py[co]
)和包的Function。通常不需要显式使用zipimport模块;内置import机制会自动将它用于 ZIPFiles 路径的sys.path项。
通常,sys.path是作为字符串的目录名称列表。此模块还允许sys.path项成为命名 ZIP 文件 Files 的字符串。 ZIP 归档文件可以包含一个子目录结构来支持软件包的导入,并且可以将归档文件中的路径指定为仅从子目录中导入。例如,路径example.zip/lib/
将仅从归档文件的lib/
子目录中导入。
ZIPFiles 中可能存在任何文件,但只有文件.py
和.py[co]
可用于导入。不允许对动态模块(.pyd
,.so
)进行 ZIP 导入。请注意,如果存档仅包含.py
文件,Python 将不会trypass添加相应的.pyc
或.pyo
文件来修改存档,这意味着,如果 ZIP 存档中不包含.pyc
文件,则导入可能会很慢。
如果在从 ZIP 归档文件加载的模块上调用,则无法使用内置的reload()函数;不太可能需要reload(),因为这意味着 ZIP 在运行时已更改。
当前不支持带有存档 Comments 的 ZIP 存档。
See also
该模块定义了一个异常:
- exception
zipimport.
ZipImportError
- zipimporter 对象引发的异常。它是ImportError的子类,因此也可以作为ImportError捕获。
31.4.1. zipimporter 对象
zipimporter是用于导入 ZIP 文件的类。
-
- class *
zipimport.
zipimporter
(* archivepath *)
- 创建一个新的 zipimporter 实例。 * archivepath *必须是 ZIP 文件的路径,或者是 ZIP 文件中的特定路径。例如,存档路径(
foo/bar.zip/lib
)将在 ZIP 文件foo/bar.zip
(假设它存在)中的lib
目录中查找模块。
- class *
如果* archivepath *没有指向有效的 ZIP 存档,则引发ZipImportError。
find_module
((全名 [,路径])- 搜索* fullname *指定的模块。 * fullname 必须是标准的(加点的)模块名称。如果找到模块,则返回 zipimporter 实例本身,否则返回None。可选的 path *参数将被忽略-此处是为了与导入程序协议兼容。
get_code
(全名)- 返回指定模块的代码对象。如果找不到该模块,请引发ZipImportError。
get_data
(* pathname *)- 返回与* pathname *关联的数据。如果找不到该文件,请提高IOError。
get_filename
(全名)- 如果导入了指定的模块,则将返回值
__file__
设置为。如果找不到该模块,请引发ZipImportError。
- 如果导入了指定的模块,则将返回值
2.7 版的新Function。
get_source
(全名)- 返回指定模块的源代码。如果找不到模块,则引发ZipImportError;如果存档中确实包含该模块,但没有源,则返回None。
is_package
(全名)- 如果* fullname *指定的模块是软件包,则返回
True
。如果找不到该模块,请引发ZipImportError。
- 如果* fullname *指定的模块是软件包,则返回
load_module
(全名)- 加载* fullname *指定的模块。 * fullname *必须是标准的(加点的)模块名称。它返回导入的模块,或者如果找不到则引发ZipImportError。
archive
- 导入程序的关联 ZIP 文件的文件名,没有可能的子路径。
prefix
- ZIP 文件中搜索模块的子路径。这是 zipimporter 对象的空字符串,它指向 ZIP 文件的根。
archive和prefix属性与斜杠结合使用时,等于赋予zipimporter构造函数的原始* archivepath *参数。
31.4.2. Examples
这是一个从 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'