Объяснять точки входа в Python?
Я прочитал документацию о точках входа яиц в пилоны и на пиковых страницах, и я все еще не понимаю. Кто-нибудь может мне их объяснить?
3 ответов
"точка входа" обычно является функцией (или другим вызываемым функциональным объектом), которую разработчик или пользователь вашего пакета Python может захотеть использовать, хотя не вызываемый объект также может быть предоставлен в качестве точки входа (как правильно указано в комментариях!).
наиболее популярной точкой входа является точка входа "console_script", которая указывает на функцию, которую вы хотите сделать доступной в качестве инструмента командной строки для тех, кто устанавливает ваш пакет. Это идет в ваш setup.py как:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
у меня есть пакет, который я только что развернул под названием "курсив.инструменты", и я хотел, чтобы он сделал доступной "курсивную" команду, которую кто-то мог запустить из командной строки, например:
$ cursive --help
usage: cursive ...
способ сделать это-определить функцию, например, функцию cursive_command в cursive/tools/cmd.py это выглядит так:
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
и так далее; он должен предположить, что он был вызван из командной строки, проанализировать аргументы, которые пользователь обеспечил, и ... делай то, для чего предназначена команда.
установить docutils пакет для отличного примера использования точки входа: он установит что-то вроде полудюжины полезных команд для преобразования документации Python в другие форматы.
EntryPoints обеспечить постоянную регистрацию имени объекта на основе файловой системы и механизм прямого импорта объекта на основе имени (реализован setuptools пакет).
они связывают имена объектов Python с идентификаторами свободной формы. Таким образом, любой другой код, используя ту же установку Python и зная идентификатор, может получить доступ к объекту с соответствующим именем, независимо от того, где объект определен. The связанные имена могут быть любыми имена, существующие в модуле Python; например, имя класса, функции или переменной. Механизм точки входа не заботится о том, к чему относится имя, если оно является импортируемым.
в качестве примера, давайте использовать (имя) функции и воображаемый модуль python с полным именем " myns.mypkg.mymodule':
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
точки входа регистрируются через объявление точек входа в setup.py - ... Для регистрации the_function в entrypoint вызывается 'my_ep_func':
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
как показано в Примере, точки входа сгруппированы; есть соответствующий API для поиска всех точек входа, принадлежащих группе (пример ниже).
при установке пакета (т. е. запуск 'python setup.py install'), вышеуказанное объявление анализируется setuptools. Затем он записывает проанализированную информацию в специальный файл. После этого API-интерфейс
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), и получил the_function, определенный там, при вызове pkg_resources.нагрузка.)(
предполагая, что не было других регистраций точки входа для того же идентификатора группы, вызов the_function был бы прост:
>>> named_objects['my_ep_func']()
hello from the_function
таким образом, хотя, возможно, немного сложно чтобы понять сначала, механизм точки входа на самом деле довольно прост в использовании. Он предоставляет полезный инструмент для разработки подключаемого программного обеспечения Python.
с абстрактной точки зрения точки входа используются для создания общесистемного реестра вызываемых файлов Python, реализующих определенные интерфейсы. В pkg_resources есть API, чтобы увидеть, какие точки входа рекламируются данным пакетом, а также API, чтобы определить, какие пакеты рекламируют определенную точку входа.
точки входа полезны для одного пакета не использовать плагины, которые находятся в другом пакете. Например, Ян Bicking это вставить проект использует запись очки широко. В этом случае вы можете написать пакет, который рекламирует свою фабрику приложений WSGI, используя точку входа paste.app_factory
.
другое использование для точек входа-перечисление всех пакетов в системе, которые предоставляют некоторые функции плагина. The TurboGears web framework использует python.templating.engines
точка входа для поиска библиотек шаблонов, которые установлены и доступны.