從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.