例子

2013-10-14 25 views

回答

3

加載的例子。例如,任何定義控制檯腳本的項目都會使用它們。 A quick search on GitHub爲您提供了大量瀏覽。

我將重點介紹一個具體示例(其中一個是而不是,位於GitHub上):Babel

巴貝爾同時使用entry_points兩個控制檯腳本和定義擴展點的翻譯文本提取。見他們的​​:

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 
     """, 
    ) 

工具像pipzc.buildout使用console_scripts切入點,以創建命令行腳本(一個叫pybabel,運行babel.messages.frontend模塊中的main()調用)。

distutils.commands入口點定義了運行時可以使用的其他命令setup.py;這些可以用在你自己的項目中,從你的設置腳本中調用Babel命令行工具。

最後但並非最不重要的一點,它註冊了自己的檢查器和提取器。該babel.extractors入口點是由babel.messages.extract.extract function加載,使用setuptoolspkg_resources module,給訪問該註冊的入口點所有安裝Python項目。下面的代碼會在這些條目的具體提取:

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就可以使用它。

1

Sentry就是一個很好的例子。 Sentry的作者甚至創建了一個名爲Logan Django的包轉換成標準的Django管理命令控制檯腳本。