例子

2013-10-14 20 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管理命令控制台脚本。