Объяснять точки входа в 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-интерфейс (часть 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), и получил 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 точка входа для поиска библиотек шаблонов, которые установлены и доступны.