RSS惑星Python フォロー イーライ・ベンダースキー:プラグインのケーススタディ:Pluggy Pluggy は、ツールやライブラリでプラグインシステムを作成するために設計された Python ライブラリです。元々は pytest プロジェクトのために開発され、その後スタンドアロンライブラリとして抽出されました。Pluggy の中心的な概念は、ホストアプリケーションによって公開され、プラグインによって実装される関数であるフックを中心に展開します。ホストは HookspecMarker を使用してフックを定義し、プラグインは HookimplMarker を使用してそれを実装します。このライブラリは、マークアップを HTML に変換し、プラグインを介してカスタムロールとコンテンツ処理をサポートする htmlize というおもちゃのツールの作成を容易にします。ホストは、プラグインがその機能を拡張できるように、htmlize_role_handler や htmlize_contents のような特定のフックを定義します。これらのフックは、さまざまなパラメーターを受け取り、データを処理するための関数を返すことができます。Pluggy の PluginManager はプラグインのロードを処理し、setuptools エントリポイントとして登録されたプラグインを発見するための便利なメカニズムを備えています。これにより、pip を介してインストールされたプラグインをホストアプリケーションが自動的に見つけてロードできるようになります。ホストは、カスタムプラグイン発見方法を使用し、マネージャーに直接プラグインを登録することもできます。ロードされたプラグインの呼び出しは簡単です。PluginManager は、登録されたフック実装への呼び出しを調整します。フックの呼び出しは通常、すべての接続されたプラグインからの結果のリストを返しますが、実行順序を制御するオプションもあります。プラグインは、ホストの hookimpl マーカーで関数をデコレートすることによってフックを実装します。Pluggy は、発見、登録、フックの使用といった基本的なプラグインの概念とよく一致しています。標準的な Python のインポートメカニズムを活用して、ホスト API をプラグインに公開するための Pythonic な方法を提供します。プラグインシステムを作成することは簡単ですが、Pluggy はシグネチャ検証、一貫した結果収集、および順序付けオプションのような高度な機能を提供します。Pluggy を使用するかどうかの決定は、プロジェクトのニーズに依存し、その高度な機能の利点と依存関係の追加を比較検討します。ライブラリの自動エントリポイント登録メカニズムは、標準的な Python パッケージングツールを利用するプロジェクトに特に役立ちます。全体として、Pluggy は拡張可能な Python アプリケーションを構築するための堅牢で柔軟なソリューションを提供します。 Eli Bendersky: Plugins case study: Pluggy eli.thegreenplace.net
HookspecMarkerを使用してフックを定義し、プラグインはHookimplMarkerを使用してそれを実装します。このライブラリは、マークアップを HTML に変換し、プラグインを介してカスタムロールとコンテンツ処理をサポートする htmlize というおもちゃのツールの作成を容易にします。ホストは、プラグインがその機能を拡張できるように、htmlize_role_handlerやhtmlize_contentsのような特定のフックを定義します。これらのフックは、さまざまなパラメーターを受け取り、データを処理するための関数を返すことができます。Pluggy のPluginManagerはプラグインのロードを処理し、setuptools エントリポイントとして登録されたプラグインを発見するための便利なメカニズムを備えています。これにより、pip を介してインストールされたプラグインをホストアプリケーションが自動的に見つけてロードできるようになります。ホストは、カスタムプラグイン発見方法を使用し、マネージャーに直接プラグインを登録することもできます。ロードされたプラグインの呼び出しは簡単です。PluginManagerは、登録されたフック実装への呼び出しを調整します。フックの呼び出しは通常、すべての接続されたプラグインからの結果のリストを返しますが、実行順序を制御するオプションもあります。プラグインは、ホストのhookimplマーカーで関数をデコレートすることによってフックを実装します。Pluggy は、発見、登録、フックの使用といった基本的なプラグインの概念とよく一致しています。標準的な Python のインポートメカニズムを活用して、ホスト API をプラグインに公開するための Pythonic な方法を提供します。プラグインシステムを作成することは簡単ですが、Pluggy はシグネチャ検証、一貫した結果収集、および順序付けオプションのような高度な機能を提供します。Pluggy を使用するかどうかの決定は、プロジェクトのニーズに依存し、その高度な機能の利点と依存関係の追加を比較検討します。ライブラリの自動エントリポイント登録メカニズムは、標準的な Python パッケージングツールを利用するプロジェクトに特に役立ちます。全体として、Pluggy は拡張可能な Python アプリケーションを構築するための堅牢で柔軟なソリューションを提供します。