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 ファインダーが作成されます。 dirname が
None
の場合、現在の sys.path に加えて任意の PEP 302 ファインダーが作成されます。フリーズまたは組み込みのモジュール。ImpImporter は現在、 sys.meta_path への配置による使用をサポートしていないことに注意してください。
- class pkgutil.ImpLoader(fullname, file, filename, etc)
Pythonの「クラシック」インポートアルゴリズムをラップする Loader 。
- pkgutil.find_loader(fullname)
指定されたフルネームのモジュールローダーを取得します。
これは、 importlib.util.find_spec()の下位互換性ラッパーであり、ほとんどの障害を ImportError に変換し、完全な
ModuleSpec
ではなくローダーのみを返します。バージョン3.4で変更: PEP 451 に基づくように更新
- pkgutil.get_importer(path_item)
指定された path_item のファインダーを取得します。
返されたファインダーは、パスフックによって新しく作成された場合、 sys.path_importer_cache にキャッシュされます。
sys.path_hooks の再スキャンが必要な場合は、キャッシュ(またはその一部)を手動でクリアできます。
- pkgutil.get_loader(module_or_name)
module_or_name の loader オブジェクトを取得します。
モジュールまたはパッケージが通常のインポートメカニズムを介してアクセス可能である場合、その機械の関連部分のラッパーが返されます。 モジュールが見つからないかインポートできない場合は、
None
を返します。 指定されたモジュールがまだインポートされていない場合は、パッケージ__path__
を確立するために、そのモジュールを含むパッケージ(存在する場合)がインポートされます。バージョン3.4で変更: PEP 451 に基づくように更新
- pkgutil.iter_importers(fullname=)
指定されたモジュール名の finder オブジェクトを生成します。
フルネームに「。」が含まれている場合、ファインダーはフルネームを含むパッケージ用になります。それ以外の場合、ファインダーはすべて登録されているトップレベルのファインダーになります(つまり、 sys.meta_pathとsys.path_hooksの両方にあるもの)。
指定されたモジュールがパッケージ内にある場合、そのパッケージは、この関数を呼び出すことの副作用としてインポートされます。
モジュール名が指定されていない場合、すべてのトップレベルのファインダーが生成されます。
- pkgutil.iter_modules(path=None, prefix=)
パス上のすべてのサブモジュールに対して ModuleInfo を生成します。または、パスが
None
の場合、sys.path
上のすべてのトップレベルモジュールを生成します。 。path は、
None
またはでモジュールを検索するパスのリストのいずれかである必要があります。prefix は、出力時にすべてのモジュール名の前に出力する文字列です。
ノート
iter_modules()
メソッドを定義するファインダーでのみ機能します。 このインターフェースは非標準であるため、モジュールは importlib.machinery.FileFinder および zipimport.zipimporter の実装も提供します。
- 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 の実装も提供します。
- 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
をサポートしていません。