EntryPoints обеспечивают постоянную регистрацию имен объектов на основе файловой системы и механизм прямого импорта объектов на основе имен (реализован в пакете setuptools ).
Они связывают имена объектов Python с идентификаторами свободной формы. Таким образом, любой другой код, использующий ту же установку Python и знающий идентификатор, может получить доступ к объекту со связанным именем, независимо от того, где этот объект определен. связанные имена могут быть любыми именами, существующими в модуле Python ; например имя класса, функции или переменной. Механизм точки входа не заботится о том, к чему относится имя, если он импортируется.
В качестве примера, давайте использовать (имя) функцию и воображаемый модуль Python с полностью определенным именем 'myns.mypkg.mymodule':
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
Точки входа регистрируются через объявление точек входа в setup.py. Чтобы зарегистрировать функцию в точке входа под названием my_ep_func:
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
Как показывает пример, точки входа сгруппированы; есть соответствующий API для поиска всех точек входа, принадлежащих группе (пример ниже).
После установки пакета (т. Е. Запуска «python setup.py install») вышеуказанное объявление анализируется программой 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) и извлекла определенную там функцию после вызова pkg_resources.load ().
При условии, что не было других регистраций точек входа для того же идентификатора группы, вызов функции _ был бы простым:
>>> named_objects['my_ep_func']()
hello from the_function
Таким образом, хотя поначалу это немного сложно понять, механизм точки входа на самом деле довольно прост в использовании. Он предоставляет полезный инструмент для разработки подключаемого программного обеспечения Python.