使用“ zipimport”模块可以从ZIP格式的归档文件中导入Python模块和软件包。该模块还允许sys.path项成为命名ZIP文件存档的字符串。ZIP档案中可能存在任何文件,但只有.py和.pyc文件可用于导入。不允许ZIP导入动态模块。
首先通过在'newdir'目录中构建文件的zip存档来说明该模块的功能。假定以下文件存在于newdir目录中
['guess.py','hello.py','impzip.py','mytest.py','prime.py','prog.py','tmp.py']
import sys, glob import zipfile files = glob.glob("*.py") print (files) zf = zipfile.PyZipFile('zipimp.zip', mode='w') for file in files: zf.write(file) zf.close()
现在,我们在本文的其余部分中使用“ zipimp.zip”。
“ zipimport”模块定义了zipimporter类,其中定义了以下方法
zipimporter ()
此方法是创建新的zipimporter实例的构造函数。它需要一个ZIP filea参数的路径。如果它不是有效的ZIP存档,则会引发ZipImportError。
>>> import zipimport >>> importer = zipimport.zipimporter('zipimp.zip')
find_module()
对于指定的模块,此方法为earch。如果找到模块,则返回zipimporter实例;否则,返回None。
>>> ret=importer.find_module('prime') >>> ret <zipimporter object "zipimp.zip"> >>> ret=importer.find_module('sample') >>> ret >>> print (ret) None
get_code()
此方法返回指定模块的代码对象,如果找不到该模块,则引发ZipImportError。
>>> prog=importer.get_code('prime') >>> print (prog) <code object <module> at 0x022A4650, file "zipimp.zip\prime.py", line 1>
load_module()
此方法加载指定的模块。它返回导入的模块,或者如果找不到则引发ZipImportError。
>>> importer = zipimport.zipimporter('zipimp.zip') >>> mod=importer.load_module('prog') 30 >>> mod.__name__ 'prog' >>> mod.__file__ 'zipimp.zip\\prog.py' >>> mod.__loader__ <zipimporter object "zipimp.zip">
get_source()
此方法返回指定模块的源代码。
>>> prog=importer.get_source('prime') >>> print (prog) def isprime(x): for i in range(2,x-1): if x%i==0: return False else: return True f = int(input()) l = int(input()) primelist = list(filter(isprime, range(f,l))) print ("prime1", "prime2", "composites") composites=[(primelist[i-1], primelist[i],(primelist[i]-1)-primelist[i-1]) for i in range(1,len(primelist))] print (composites)