– 从Zip档案导入模块 – 导入模块(Python教程)(参考资料)
zipimport
– 从Zip存档导入模块
此模块添加了从ZIP格式存档导入Python模块(*.py
,*.pyc
)和包的功能。通常不需要明确地使用zipimport
模块;它是由内置的import
机制自动用于sys.path
路径为ZIP档案的项目.
通常,sys.path
是一个目录名列表字符串。此模块还允许sys.path
项成为命名ZIP文件存档的字符串.ZIP存档可以包含支持包导入的子目录结构,并且可以指定存档中的路径仅从asubdirectory导入。例如,路径example.zip/lib/
只会从存档中的lib/
子目录导入.
ZIP存档中可能存在任何文件,但只有文件.py
和.pyc
可以导入。不允许ZIP导入动态模块(.pyd
, .so
)。请注意,如果存档只包含.py
文件,Python将不会尝试通过添加相应的.pyc
文件,意思是如果ZIP存档不包含.pyc
文件,导入可能会很慢.
目前不支持带存档注释的ZIP存档.
也可以看看
这个模块定义了一个例外:
- exception
zipimport.
ZipImportError
-
zipimporter对象引发的异常。它是
ImportError
的子类,所以它也可以被ImportError
抓住.
zipimporter对象
zipimporter
是导入ZIP文件的类.
- class
zipimport.
zipimporter
(archivepath) -
创建一个新的zipimporter实例。archivepath必须是ZIP文件的路径,或ZIP文件中的特定路径。例如,archivepath
foo/bar.zip/lib
将在lib
目录中查找ZIP文件中的模块foo/bar.zip
(只要它存在).ZipImportError
如果archivepath没有指向有效的ZIParchive,则会被提出find_module
(fullname [, path])-
搜索fullname. fullname指定的模块必须是完全限定(点线)的模块名称。如果找到模块,则返回zipimporter实例,如果不是,则返回
None
。可选的path参数被忽略 – 它与导入器协议兼容.
get_code
(fullname)-
返回指定模块的代码对象。如果找不到模块,请举起
ZipImportError
.
get_data
(pathname)-
返回与pathname相关的数据。如果找不到文件,请
OSError
举起改进版本3.3:
IOError
以前用来代替OSError
.
get_filename
(fullname)-
如果导入指定的模块,则返回值
__file__
将被设置为。如果模块无法发出ZipImportError
举起版本3.1.
get_source
(fullname)-
中的新内容返回指定模块的源代码。如果找不到模块,请举起
ZipImportError
,返回None
如果存档确实包含模块,但没有源它.
is_package
(fullname)-
返回
True
如果由指定的模块fullname是一个包。提高ZipImportError
如果找不到模块的话
load_module
(fullname)-
加载由fullname. fullname指定的模块必须是完全限定(虚线)的模块名称。它返回导入的模块,或者如果没有找到则
ZipImportError
.
archive
-
导入器关联的ZIP文件的文件名,没有可能的子路径.
prefix
-
ZIP文件中搜索模块的子路径。这是zipimporter对象的空字符串,指向ZIP文件的根.
archive
和prefix
属性,当与aslash结合时,等于给archivepath构造函数的原始zipimporter
参数.
示例
这是一个从ZIP存档导入模块的示例 – 请注意zipimport
模块没有明确使用.
$ unzip -l example.zipArchive: example.zip Length Date Time Name -------- ---- ---- ---- 8467 11-26-02 22:30 jwzthreading.py -------- ------- 8467 1 file$ ./pythonPython 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"