5

setuptools の entry_points を発見しました:

http://pythonhosted.org/setuptools/setuptools.html#dynamic-discovery-of-services-and-plugins

引用: setuptools は、アプリケーションまたはフレームワークによってインポートできるプロジェクトに「エントリ ポイント」を登録できるようにすることで、拡張可能なアプリケーションおよびフレームワークに「プラグイン」するライブラリの作成をサポートします。

しかし、それらを使用したプロジェクトは見たことがありません。

それらを使用するプロジェクトの例はありますか?

そうでない場合、なぜそれらは使用されないのですか?

4

2 に答える 2

4

たくさんの例があります。たとえば、コンソール スクリプトを定義するすべてのプロジェクトでそれらが使用されます。GitHub をすばやく検索すると、たくさんの情報が表示されます。

1 つの特定の例 ( GitHub にないもの)に焦点を当てます: Babel .

Babel はentry_points、コンソール スクリプトと、翻訳可能なテキスト抽出の拡張ポイントの定義の両方に使用します。setup.pyソースを参照してください:

if have_setuptools:
    extra_arguments = dict(
        zip_safe = False,
        test_suite = 'babel.tests.suite',
        tests_require = ['pytz'],

        entry_points = """
        [console_scripts]
        pybabel = babel.messages.frontend:main

        [distutils.commands]
        compile_catalog = babel.messages.frontend:compile_catalog
        extract_messages = babel.messages.frontend:extract_messages
        init_catalog = babel.messages.frontend:init_catalog
        update_catalog = babel.messages.frontend:update_catalog

        [distutils.setup_keywords]
        message_extractors = babel.messages.frontend:check_message_extractors

        [babel.checkers]
        num_plurals = babel.messages.checkers:num_plurals
        python_format = babel.messages.checkers:python_format

        [babel.extractors]
        ignore = babel.messages.extract:extract_nothing
        python = babel.messages.extract:extract_python
        javascript = babel.messages.extract:extract_javascript
        """,
    )

ツールは、エントリ ポイントを使用してコマンドライン スクリプトを作成します (モジュール内で callable を実行する という名前pipのスクリプト) 。zc.buildoutconsole_scriptspybabelmain()babel.messages.frontend

エントリ ポイントは、distutils.commands実行時に使用できる追加のコマンドを定義しますsetup.py。これらを独自のプロジェクトで使用して、セットアップ スクリプトから直接 Babel コマンドライン ユーティリティを呼び出すことができます。

最後に、独自のチェッカーとエクストラクタを登録します。エントリ ポイントは、 moduleを使用してfunctionbabel.extractorsによって読み込まれ、そのエントリ ポイントを登録したインストール済みのすべての Python プロジェクトにアクセスできます。次のコードは、これらのエントリで特定のエクストラクタを探します。babel.messages.extract.extractsetuptools pkg_resources

try:
    from pkg_resources import working_set
except ImportError:
    pass
else:
    for entry_point in working_set.iter_entry_points(GROUP_NAME,
                                                     method):
        func = entry_point.load(require=True)
        break

これにより、どのプロジェクトでも追加のエクストラクタを登録できます。にエントリーポイントを追加するだけでsetup.py、Babel はそれを利用できます。

于 2013-10-14T09:43:29.697 に答える
1

セントリーが良い例です。Sentry の作成者は、Loganという名前の django パッケージを作成して、標準の django 管理コマンドをコンソール スクリプトに変換しました。

于 2013-10-14T09:45:29.453 に答える