pkgutil —パッケージ拡張ユーティリティ—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/pkgutil
移動先:案内検索

pkgutil —パッケージ拡張ユーティリティ

ソースコード: :source: `Lib / pkgutil.py`



このモジュールは、インポートシステムのユーティリティ、特にパッケージサポートを提供します。

class pkgutil.ModuleInfo(module_finder, name, ispkg)

モジュールの情報の簡単な要約を保持する名前付きタプル。

バージョン3.6の新機能。

pkgutil.extend_path(path, name)

パッケージを構成するモジュールの検索パスを拡張します。 使用目的は、パッケージの__init__.pyに次のコードを配置することです。

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

これにより、パッケージの__path__に、パッケージにちなんで名付けられたsys.path上のディレクトリのすべてのサブディレクトリが追加されます。 これは、単一の論理パッケージのさまざまな部分を複数のディレクトリとして配布する場合に役立ちます。

また、*name 引数と一致する場所から始まる*.pkgファイルも検索します。 この機能は、*.pthファイル(詳細については site モジュールを参照)に似ていますが、importで始まる特殊なケースの行がない点が異なります。 *.pkgファイルは額面どおりに信頼されます。重複のチェックを除いて、*.pkgファイルで見つかったすべてのエントリは、ファイルシステムに存在するかどうかに関係なく、パスに追加されます。 (これは機能です。)

入力パスがリストでない場合(フリーズされたパッケージの場合のように)、変更されずに返されます。 入力パスは変更されません。 拡張コピーが返されます。 アイテムは最後にコピーに追加されるだけです。

sys.path はシーケンスであると想定されています。 既存のディレクトリを参照する文字列ではない sys.path の項目は無視されます。 ファイル名として使用するとエラーが発生する sys.path のUnicodeアイテムにより、この関数で例外が発生する場合があります( os.path.isdir()の動作に沿って)。

class pkgutil.ImpImporter(dirname=None)

PEP 302 Pythonの「クラシック」インポートアルゴリズムをラップするファインダー。

dirname が文字列の場合、そのディレクトリを検索する PEP 302 ファインダーが作成されます。 dirnameNoneの場合、現在の sys.path に加えて任意の PEP 302 ファインダーが作成されます。フリーズまたは組み込みのモジュール。

ImpImporter は現在、 sys.meta_path への配置による使用をサポートしていないことに注意してください。

バージョン3.3以降非推奨:標準のインポートメカニズムが完全に PEP 302 に準拠し、 importlib で利用できるようになったため、このエミュレーションは不要になりました]。

class pkgutil.ImpLoader(fullname, file, filename, etc)

Pythonの「クラシック」インポートアルゴリズムをラップする Loader

バージョン3.3以降非推奨:標準のインポートメカニズムが完全に PEP 302 に準拠し、 importlib で利用できるようになったため、このエミュレーションは不要になりました]。

pkgutil.find_loader(fullname)

指定されたフルネームのモジュールローダーを取得します。

これは、 importlib.util.find_spec()の下位互換性ラッパーであり、ほとんどの障害を ImportError に変換し、完全なModuleSpecではなくローダーのみを返します。

バージョン3.3で変更:パッケージ内部の PEP 302 インポートエミュレーションに依存するのではなく、 importlib に直接基づくように更新されました。

バージョン3.4で変更: PEP 451 に基づくように更新

pkgutil.get_importer(path_item)

指定された path_itemファインダーを取得します。

返されたファインダーは、パスフックによって新しく作成された場合、 sys.path_importer_cache にキャッシュされます。

sys.path_hooks の再スキャンが必要な場合は、キャッシュ(またはその一部)を手動でクリアできます。

バージョン3.3で変更:パッケージ内部の PEP 302 インポートエミュレーションに依存するのではなく、 importlib に直接基づくように更新されました。

pkgutil.get_loader(module_or_name)

module_or_nameloader オブジェクトを取得します。

モジュールまたはパッケージが通常のインポートメカニズムを介してアクセス可能である場合、その機械の関連部分のラッパーが返されます。 モジュールが見つからないかインポートできない場合は、Noneを返します。 指定されたモジュールがまだインポートされていない場合は、パッケージ__path__を確立するために、そのモジュールを含むパッケージ(存在する場合)がインポートされます。

バージョン3.3で変更:パッケージ内部の PEP 302 インポートエミュレーションに依存するのではなく、 importlib に直接基づくように更新されました。

バージョン3.4で変更: PEP 451 に基づくように更新

pkgutil.iter_importers(fullname=)

指定されたモジュール名の finder オブジェクトを生成します。

フルネームに「。」が含まれている場合、ファインダーはフルネームを含むパッケージ用になります。それ以外の場合、ファインダーはすべて登録されているトップレベルのファインダーになります(つまり、 sys.meta_pathとsys.path_hooksの両方にあるもの)。

指定されたモジュールがパッケージ内にある場合、そのパッケージは、この関数を呼び出すことの副作用としてインポートされます。

モジュール名が指定されていない場合、すべてのトップレベルのファインダーが生成されます。

バージョン3.3で変更:パッケージ内部の PEP 302 インポートエミュレーションに依存するのではなく、 importlib に直接基づくように更新されました。

pkgutil.iter_modules(path=None, prefix=)

パス上のすべてのサブモジュールに対して ModuleInfo を生成します。または、パスNoneの場合、sys.path上のすべてのトップレベルモジュールを生成します。 。

path は、Noneまたはでモジュールを検索するパスのリストのいずれかである必要があります。

prefix は、出力時にすべてのモジュール名の前に出力する文字列です。

ノート

iter_modules()メソッドを定義するファインダーでのみ機能します。 このインターフェースは非標準であるため、モジュールは importlib.machinery.FileFinder および zipimport.zipimporter の実装も提供します。

バージョン3.3で変更:パッケージ内部の PEP 302 インポートエミュレーションに依存するのではなく、 importlib に直接基づくように更新されました。

pkgutil.walk_packages(path=None, prefix=, onerror=None)

パスですべてのモジュールの ModuleInfo を再帰的に生成します。または、パスNoneの場合は、アクセス可能なすべてのモジュールを生成します。

path は、Noneまたはでモジュールを検索するパスのリストのいずれかである必要があります。

prefix は、出力時にすべてのモジュール名の前に出力する文字列です。

この関数は、__path__属性にアクセスするために、指定されたパス上のすべてのパッケージではなくすべてのモジュール!)をインポートする必要があることに注意してください。サブモジュールを見つけます。

onerror は、パッケージのインポート中に例外が発生した場合に、1つの引数(インポートされていたパッケージの名前)で呼び出される関数です。 onerror 関数が指定されていない場合、 ImportError はキャッチされて無視されますが、他のすべての例外は伝播され、検索が終了します。

例:

# list all modules python can access
walk_packages()

# list all submodules of ctypes
walk_packages(ctypes.__path__, ctypes.__name__ + '.')

ノート

iter_modules()メソッドを定義するファインダーでのみ機能します。 このインターフェースは非標準であるため、モジュールは importlib.machinery.FileFinder および zipimport.zipimporter の実装も提供します。

バージョン3.3で変更:パッケージ内部の PEP 302 インポートエミュレーションに依存するのではなく、 importlib に直接基づくように更新されました。

pkgutil.get_data(package, resource)

パッケージからリソースを取得します。

これは、ローダー get_data APIのラッパーです。 package 引数は、標準モジュール形式(foo.bar)のパッケージの名前である必要があります。 resource 引数は、パス区切り文字として/を使用して、相対ファイル名の形式にする必要があります。 親ディレクトリ名..は許可されておらず、ルート名(/で始まる)も許可されていません。

この関数は、指定されたリソースの内容であるバイナリ文字列を返します。

すでにインポートされているファイルシステムにあるパッケージの場合、これは大まかに次のようになります。

d = os.path.dirname(sys.modules[package].__file__)
data = open(os.path.join(d, resource), 'rb').read()

パッケージが見つからないかロードできない場合、またはget_dataをサポートしないローダーを使用している場合は、Noneが返されます。 特に、名前空間パッケージローダーget_dataをサポートしていません。