質問

私はPylonsの中で、ピークページに卵のエントリポイントのドキュメントを読んで、私はまだ本当に理解していません。誰かが私にそれを説明してもらえますか?

役に立ちましたか?

解決

非呼び出し可能オブジェクトは、同様のエントリポイントとして供給することができるものの、

アン「のエントリポイントは、」あなたのPythonパッケージの開発者やユーザーが使用する場合がありますことを、通常の関数(またはその他の呼び出し可能な関数のようなオブジェクト)であります(として正しくコメントで指摘!)。

のエントリポイントの中で最も人気のある種類は、あなたのパッケージをインストール誰にコマンドラインツールとして利用できるようにしたい機能を指して「console_script」エントリー・ポイントです。これは、のようなあなたのsetup.pyになります:

entry_points={
    'console_scripts': [
        'cursive = cursive.tools.cmd:cursive_command',
    ],
},

私はちょうど「cursive.tools」と呼ばれる展開きたパッケージを持っている、と私は次のようにそれは、誰かがコマンドラインから実行することができると「筆記体」コマンド利用できるようにしたかっます:

$ cursive --help
usage: cursive ...

これを行う方法は次のようになり筆記体/ツール/ cmd.pyで多分「cursive_command」機能のように、関数を定義しています

def cursive_command():
    args = sys.argv[1:]
    if len(args) < 1:
        print "usage: ..."

など。それは、それは、コマンドラインから呼び出されていますことを前提とし、ユーザーが提供していること引数を解析し、...よく、コマンドを実行するように設計されたものは何でもする必要があります。

エントリポイント利用の偉大例えばのdocutils のパッケージをインストールします。それがインストールされます他の形式にPythonドキュメントを変換するための半ダースの有用なコマンドのようなもの。

他のヒント

エントリポイントの永続を提供し、ファイルシステムベースのオブジェクト名登録および( 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」)の際に、上記宣言は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のは、特殊ファイルに書かれたエントリポイントの情報をお読みください。それは、エントリポイントを発見モジュール(myns.mypkg.mymodule)をインポートし、そしてthe_functionはpkg_resources.loadの呼び出し時に、そこに定義された検索()。

同じグループIDには、他のエントリポイントの登録がthe_functionは、単純なことでしょう呼び出すこと、ありませんでしたと仮定すると、

>>> named_objects['my_ep_func']()
hello from the_function
おそらく難しいビットが最初に把握しながら、

このように、エントリポイント機構は、実際に使用することが非常に簡単です。これは、プラグイン可能なPythonのソフトウェア開発のための便利なツールを提供しています。

ビューの抽象点から、エントリポイントは、特定のインタフェースを実装するPythonの呼び出し可能オブジェクトのシステム全体のレジストリを作成するために使用されます。パッケージは、特定のエントリポイントを宣伝決定するためのAPIだけでなく、特定のパッケージによってアドバタイズされたエントリポイントを確認するpkg_resourcesでのAPIがあります。

エントリポイントは別のパッケージにあるプラグインを使用しない一つのパッケージを可能にするために有用です。例えば、イアンBickingのは、プロジェクトが広範囲にエントリポイントを使用していますを貼り付けます。このケースでは、エントリポイントpaste.app_factoryを使用してWSGIアプリケーションの工場をアドバタイズし、パッケージを書くことができます。

のエントリポイントの別の用途は、いくつかのプラグインの機能を提供するシステム上のすべてのパッケージを列挙しています。 TurboGearsののWebフレームワークは、<のhref = "http://docs.turbogears.org/1.0/TemplatePlugins" を使用していますREL =「noreferrer」> python.templating.engines のエントリポイントが設置され、使用できるテンプレートライブラリを検索します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top