zipimport
---从zip存档导入模块¶
源代码: Lib/zipimport.py
这个模块增加了导入python模块的能力 (*.py
, *.pyc
)以及压缩格式档案中的文件包。通常不需要使用 zipimport
模块显式地;它由内置的 import
机制 sys.path
作为zip存档文件路径的项。
通常, sys.path
是作为字符串的目录名列表。此模块还允许 sys.path
为命名zip文件存档的字符串。zip存档可以包含子目录结构以支持包导入,并且可以指定存档中的路径以仅从子目录导入。例如,路径 example.zip/lib/
只能从 lib/
存档中的子目录。
压缩文件中可能存在任何文件,但只有文件 .py
和 .pyc
可以导入。动态模块的zip导入 (.pyd
, .so
)不允许。请注意,如果存档仅包含 .py
文件,python不会尝试通过添加相应的 .pyc
文件,这意味着如果压缩文件不包含 .pyc
文件,导入可能相当慢。
在 3.8 版更改: 以前,不支持带有存档注释的zip存档。
参见
- PKZIP Application Note
文件的压缩文件格式由菲尔卡茨,格式和算法的创建者使用。
- PEP 273 -从zip存档导入模块
作者JamesC.Ahlstrom,他也提供了一个实现。python 2.3遵循中的规范 PEP 273 ,但使用了一个仅由van Rossum编写的实现,该实现使用中描述的导入挂钩 PEP 302 .
importlib
--实施进口机械为所有进口商提供相关协议以供实施的软件包。
此模块定义了一个异常:
- exception zipimport.ZipImportError¶
ZipImporter对象引发异常。它是
ImportError
,所以它可以被捕获为ImportError
也是。
ZipImporter对象¶
zipimporter
是用于导入zip文件的类。
- class zipimport.zipimporter(archivepath)¶
创建新的ZipImporter实例。 档案室 必须是zip文件的路径,或者是zip文件中的特定路径。例如,一个 档案室 属于
foo/bar.zip/lib
将在中查找模块lib
zip文件中的目录foo/bar.zip
(前提是它存在)。ZipImportError
如果 档案室 未指向有效的zip存档。- create_module(spec)¶
实施
importlib.abc.Loader.create_module()
那就回来了None
显式请求默认语义。3.10 新版功能.
- exec_module(module)¶
实施
importlib.abc.Loader.exec_module()
。3.10 新版功能.
- find_loader(fullname, path=None)¶
一种实现
importlib.abc.PathEntryFinder.find_loader()
。3.10 版后已移除: 使用
find_spec()
取而代之的是。
- find_module(fullname, path=None)¶
搜索由指定的模块 全名 . 全名 必须是完全限定(虚线)模块名。如果找到模块,则返回zipImporter实例本身,或者
None
如果不是的话。可选 path 参数被忽略---这是为了与导入程序协议兼容。3.10 版后已移除: 使用
find_spec()
取而代之的是。
- 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)¶
返回
True
如果模块由指定 全名 是一个包裹。提高ZipImportError
如果找不到模块。
- load_module(fullname)¶
加载由指定的模块 全名 。 全名 必须是完全限定(点分)的模块名称。成功时返回导入的模块,引发
ZipImportError
在失败的时候。3.10 版后已移除: 使用
exec_module()
取而代之的是。
- archive¶
导入程序关联的zip文件的文件名,没有可能的子路径。
- prefix¶
在zip文件中搜索模块的子路径。这是指向zip文件根目录的zipImporter对象的空字符串。
这个
archive
和prefix
属性与斜线组合时,等于原始属性 档案室 给出给zipimporter
构造函数。
实例¶
下面是一个从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'