从Zip压缩包导入Python模块(zipimport)


使用'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文件的路径作为参数。如果它不是有效的ZIP压缩包,则会引发ZipImportError。

>>> import zipimport
>>> importer = zipimport.zipimporter('zipimp.zip')

find_module()

此方法搜索指定的模块。如果找到模块,则返回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)

更新于:2019年7月30日

2K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.