zipimport
zipimport - 从Zip档案导入模块
2.3版本的新功能。
该模块增加了从ZIP格式档案中导入Python模块(*.py
,*.py[co]
)和软件包的功能。通常不需要zipimport
明确使用该模块; 内置import
机制会自动使用它作为sys.path
ZIP归档路径的项目。
通常,sys.path
是作为字符串的目录名称列表。该模块还允许将一个项目sys.path
作为一个命名ZIP文件存档的字符串。ZIP归档文件可以包含一个子目录结构以支持包导入,并且归档中的路径可以被指定为仅从子目录导入。例如,路径example.zip/lib/
只能从lib/
存档中的子目录导入。
任何文件可能存在于ZIP压缩文件,但只有文件.py
和.py[co]
可供导入。动态模块(.pyd
,.so
)的ZIP导入是不允许的。请注意,如果归档仅包含.py
的文件,Python将不会试图通过增加相应的修改该文件.pyc
或.pyo
文件,这意味着如果一个ZIP压缩文件不包含.pyc
文件,进口可能会相当缓慢。
reload()
如果调用从ZIP压缩文件加载的模块,则使用内置函数将失败; 这是不太可能的reload()
,因为这意味着ZIP在运行时被改变了。
目前不支持带归档评论的ZIP归档。
另请参阅
PKZIP应用说明由Phil Katz 撰写的关于ZIP文件格式的文件,它是所使用的格式和算法的创建者。 PEP 273
- 从Zip档案导入模块James C. Ahlstrom撰写,他也提供了一个实现。Python 2.3遵循PEP 273
中的规范,但使用Just van Rossum编写的使用PEP 302中描述的导入钩子的实现 。PEP 302
- 新导入钩子PEP添加有助于此模块工作的导入钩子。
该模块定义了一个例外:
exception zipimport.ZipImportError
zipimporter对象引发异常。这是它的一个子类ImportError
,所以它也可以被捕获ImportError
。
1. zipimporter对象
zipimporter
是导入ZIP文件的类。
class zipimport.zipimporter(archivepath)
创建一个新的zipimporter实例。archivepath
必须是ZIP文件的路径,或ZIP文件中的特定路径。例如,archivepath
的foo/bar.zip/lib
将查找模块在lib
ZIP文件内的目录foo/bar.zip
(假设它存在)。
ZipImportError
如果archivepath
未指向有效的ZIP存档,则会引发此问题。
find_module(fullname[, path])
搜索由全名
指定的模块。完整名称
必须是完全限定的(虚线)模块名称。它返回zipimporter实例本身,如果找到该模块,或者None
它不是。可选的路径
参数被忽略 - 它在那里与进口协议兼容。
get_code(fullname)
返回指定模块的代码对象。ZipImportError
如果找不到该模块,请升级。
get_data(pathname)
返回与路径名
关联的数据。提高IOError
如果没有找到该文件。
get_filename(fullname)
__file__
如果指定的模块被导入,返回值将被设置为。ZipImportError
如果找不到该模块,请升级。
2.7版本的新功能。
get_source(fullname)
返回指定模块的源代码。ZipImportError
如果找不到该模块,None
则进行提升,如果存档确实包含该模块,则返回,但没有来源。
is_package(fullname)
返回True
如果由指定的模块全名
是一个包。ZipImportError
如果找不到该模块,请升级。
load_module(fullname)
加载由全名
指定的模块。完整名称
必须是完全限定的(虚线)模块名称。它返回导入的模块,或者ZipImportError
如果找不到则引发。
archive
导入程序的关联ZIP文件的文件名,没有可能的子路径。
prefix
ZIP文件中用于搜索模块的子路径。这是zipimporter对象的空字符串,它指向ZIP文件的根目录。
当与斜线组合时,archive
和prefix
属性等于给予构造函数的原始归档路径
参数zipimporter
。
2.例子
这里是一个从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'