使用“ 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
>>> ret=importer.find_module('sample')
>>> ret
>>> print (ret)
None
get_code()
此方法返回指定模块的代码对象,如果找不到该模块,则引发ZipImportError。>>> prog=importer.get_code('prime')
>>> print (prog)
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__
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)