回答:
「エントリポイント」は通常、Pythonパッケージの開発者またはユーザーが使用する可能性がある関数(または他の呼び出し可能な関数のようなオブジェクト)ですが、呼び出し不可のオブジェクトもエントリポイントとして提供できます(正しくコメントで指摘されました!)
最も一般的な種類のエントリポイントは、console_scriptsエントリポイントです。これは、パッケージをインストールするすべての人がコマンドラインツールとして利用できるようにする関数を指します。これは次のようにsetup.pyに入ります:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
展開したばかりの「cursive.tools」というパッケージがあります。次のように、コマンドラインから実行できる「cursive」コマンドを利用できるようにしたいと考えています。
$ cursive --help
usage: cursive ...
これを行う方法は、次のようなcursive / tools / cmd.pyの「cursive_command」関数のような関数を定義することです。
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
など; コマンドラインから呼び出されたものと想定し、ユーザーが提供した引数を解析します。そして、コマンドが実行するように設計されていることをすべて実行します。
エントリポイントの使用例としてdocutilsパッケージをインストールしてください。Pythonドキュメントを他の形式に変換するための便利なコマンドがいくつかインストールされます。
EntryPointsは、永続的なファイルシステムベースのオブジェクト名登録と名前ベースの直接オブジェクトインポートメカニズム(setuptoolsパッケージによって実装)を提供します。
Pythonオブジェクトの名前を自由形式の識別子に関連付けます。したがって、同じPythonインストールを使用し、識別子がわかっている他のコードは、オブジェクトがどこで定義されていても、関連付けられた名前のオブジェクトにアクセスできます。関連する名前は、Pythonモジュール内の既存の任意の名前することができ ; たとえば、クラス、関数、または変数の名前。エントリポイントメカニズムは、インポート可能である限り、名前が何を参照しているかを気にしません。
例として、関数(の名前)と完全修飾名 'myns.mypkg.mymodule'を持つ架空のpythonモジュールを使用してみましょう:
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
エントリポイントは、setup.pyのエントリポイント宣言を介して登録されます。「my_ep_func」と呼ばれるエントリーポイントの下にthe_functionを登録するには、次のようにします。
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
例に示すように、エントリポイントはグループ化されています。グループに属するすべてのエントリポイントを検索するための対応するAPIがあります(以下の例)。
パッケージをインストールすると(つまり、「python setup.py install」を実行すると)、上記の宣言はsetuptoolsによって解析されます。次に、解析された情報を特殊ファイルに書き込みます。その後、pkg_resources API(setuptoolsの一部)を使用して、エントリポイントを検索し、関連する名前でオブジェクトにアクセスできます。
import pkg_resources
named_objects = {}
for ep in pkg_resources.iter_entry_points(group='my_ep_group_id'):
named_objects.update({ep.name: ep.load()})
ここで、setuptoolsは、特殊ファイルに書き込まれたエントリポイント情報を読み取ります。pkg_resources.load()を呼び出すと、エントリポイントが見つかり、モジュール(myns.mypkg.mymodule)がインポートされ、そこで定義されているthe_functionが取得されました。
同じグループIDの他のエントリポイント登録がないと仮定すると、the_functionの呼び出しは簡単です。
>>> named_objects['my_ep_func']()
hello from the_function
したがって、最初は少し理解しにくいかもしれませんが、エントリポイントメカニズムは実際には非常に簡単に使用できます。プラグイン可能なPythonソフトウェア開発に役立つツールを提供します。
EntryPoints
説明は非常に明確ですが、リンクは、古いです。
抽象的な観点から、エントリポイントは、特定のインターフェイスを実装するPython呼び出し可能オブジェクトのシステム全体のレジストリを作成するために使用されます。pkg_resourcesには、特定のエントリポイントをアドバタイズするパッケージを決定するAPIと同様に、特定のパッケージによってアドバタイズされるエントリポイントを確認するためのAPIがあります。
エントリポイントは、あるパッケージが別のパッケージにあるプラグインを使用できるようにする場合に役立ちます。たとえば、Ian BickingのPasteプロジェクトはエントリポイントを広範囲に使用しています。この場合、エントリポイントを使用して、WSGIアプリケーションファクトリをアドバタイズするパッケージを作成できますpaste.app_factory
。
エントリポイントのもう1つの用途は、一部のプラグイン機能を提供するシステム上のすべてのパッケージを列挙することです。TurboGearsのの Webフレームワークは、使用していますpython.templating.engines
インストールされ、使用できるテンプレートライブラリをルックアップするためのエントリポイントを。
setup.py
は何も含まentry_points
れていません。