Python
 Computer >> コンピューター >  >> プログラミング >> Python

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()

このメソッドは、指定されたモジュールに対して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)

  1. Pythonモジュールから単一の関数をインポートする方法は?

    「frommoduleimportfunction」ステートメントを使用して、Pythonモジュールから特定の関数をインポートできます。たとえば、他の関数をインポートせずに数学ライブラリからsin関数をインポートする場合は、次のように実行できます。 >>> from math import sin >>> sin(0) 0.0 sinの前に「数学」を付ける必要はないことに注意してください。罪だけがインポートされ、数学はインポートされていないからです。また、インポートした関数のエイリアスを作成することもできます。たとえば、 >>> from

  2. Pythonで複数のインポートを行う方法は?

    複数のモジュールをインポートするには、importステートメントを複数回使用するだけです。たとえば、 >>> import os >>> import math >>> import sys インポートをグループ化する方が理にかなっている場合があります。 1つのインポートステートメントで複数のモジュールをインポートするには、モジュール名をコンマで区切ります。たとえば、 >>> import math, sys, os モジュールがインポートされる名前を変更する場合は、各モジュール名の後にモジュールエイリアスを追加します