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)
-
Pythonモジュールから単一の関数をインポートする方法は?
「frommoduleimportfunction」ステートメントを使用して、Pythonモジュールから特定の関数をインポートできます。たとえば、他の関数をインポートせずに数学ライブラリからsin関数をインポートする場合は、次のように実行できます。 >>> from math import sin >>> sin(0) 0.0 sinの前に「数学」を付ける必要はないことに注意してください。罪だけがインポートされ、数学はインポートされていないからです。また、インポートした関数のエイリアスを作成することもできます。たとえば、 >>> from
-
Pythonで複数のインポートを行う方法は?
複数のモジュールをインポートするには、importステートメントを複数回使用するだけです。たとえば、 >>> import os >>> import math >>> import sys インポートをグループ化する方が理にかなっている場合があります。 1つのインポートステートメントで複数のモジュールをインポートするには、モジュール名をコンマで区切ります。たとえば、 >>> import math, sys, os モジュールがインポートされる名前を変更する場合は、各モジュール名の後にモジュールエイリアスを追加します