2013-10-14 3 views
4

I discoverd entry_points из Setuptools:Примеры использования entry_point

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

цитата: Setuptools поддерживает создание библиотеки, «заткнуть в» для расширяемых приложений и платформ, позволяя регистрировать «точки входа» в проекте которые могут быть импортированы приложением или каркасом.

Но я не видел проект, использующий их.

Есть ли примеры проектов, которые их используют?

Если нет, то почему они не используются?

ответ

3

загрузок примеров. Например, любой проект, который определяет консольные скрипты, использует их. A quick search on GitHub дает вам много возможностей для просмотра.

Я сосредоточусь на одном конкретном примере (то есть не на GitHub): Babel.

Бабель использует как entry_points для обоих консольных скриптов, так и для определения точек расширения для перевода текста. Смотрите их setup.py source:

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

инструменты, как pip и zc.buildout использовать точку входа console_scripts для создания командной строки сценариев (один называется pybabel, запустив main() отозваны в babel.messages.frontend модуле).

Точки входа определяют дополнительные команды, которые можно использовать при запуске 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 даже создал пакет django с именем Logan для преобразования стандартных команд управления django в консольные скрипты.

Смежные вопросы