別のパッケージ内へのインストールはサポートされていません。
代わりに、代わりにエントリ ポイントを使用します。origmodule
特定のキーのエントリ ポイントとして登録されているものを探す必要があり、モジュールextension
はそのキーに自身を登録する必要があります。
拡張機能が拡張ポイントを登録します。
entry_points={
'some.opaque.string.unique.to.origmodule':
['my_extension = my.extension.package:some.entry.point', ]
}
origmodule
次に、次のように尋ねることで発見できますpkg_resources
。
import pkg_resources
for entrypoint in pkg_resources.iter_entry_points(group='some.opaque.string.unique.to.origmodule'):
extension = entrypoint.load()
例として、 Babel プロジェクトを見てみましょう。Babel はファイルから翻訳可能なテキストを抽出できます。Python ソース コードに対してこれを行う方法を知っていますが、そのようなテキストを他の形式から抽出できる拡張機能もサポートしています。
このような抽出方法を拡張ポイントとして登録できます。Babel は、抽出メソッドの記述セクションでこれを文書化しています。次に、メッセージ抽出コードは、テキストを抽出するときにこれらのエントリ ポイントを読み込みます。
GROUP_NAME = 'babel.extractors'
# ...
for entry_point in working_set.iter_entry_points(GROUP_NAME,
method):
func = entry_point.load(require=True)
break
Mako テンプレート言語はそのようなプラグインを提供します。実際の実装を指すエントリ ポイントを登録します。
[babel.extractors]
mako = mako.ext.babelplugin:extract
def extract(fileobj, keywords, comment_tags, options):
# ...