Вопрос

Я прочитал документацию о точках входа яиц в Пилонах и на страницах Пика, но до сих пор не совсем понял.Может ли кто-нибудь объяснить мне их?

Это было полезно?

Решение

«Точка входа» обычно представляет собой функцию (или другой вызываемый объект, подобный функции), которую может захотеть использовать разработчик или пользователь вашего пакета Python, хотя невызываемый объект также может быть предоставлен в качестве точки входа (как правильно отметил в комментариях!).

Самый популярный вид точки входа — это точка входа «console_script», которая указывает на функцию, которую вы хотите сделать доступной в виде инструмента командной строки тому, кто установит ваш пакет.Это входит в ваш setup.py, например:

entry_points={
    'console_scripts': [
        'cursive = cursive.tools.cmd:cursive_command',
    ],
},

У меня есть пакет, который я только что развернул, под названием «cursive.tools», и я хотел, чтобы он сделал доступной «курсивную» команду, которую кто-то мог бы запустить из командной строки, например:

$ cursive --help
usage: cursive ...

Способ сделать это — определить функцию, например функцию «cursive_command» в cursive/tools/cmd.py, которая выглядит так:

def cursive_command():
    args = sys.argv[1:]
    if len(args) < 1:
        print "usage: ..."

и так далее;он должен предположить, что он был вызван из командной строки, проанализировать аргументы, предоставленные пользователем, и...ну, делайте все, для чего предназначена команда.

Установите документы пакет для отличного примера использования точки входа:он установит около полдюжины полезных команд для преобразования документации Python в другие форматы.

Другие советы

Точки входа обеспечить постоянную регистрацию имен объектов на основе файловой системы и механизм прямого импорта объектов на основе имен (реализованный инструменты настройки упаковка).

Они связывают имена объектов 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.Чтобы зарегистрировать the_function в точке входа под названием «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().

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

>>> named_objects['my_ep_func']()
hello from the_function

Таким образом, хотя на первый взгляд механизм точки входа, возможно, немного сложен для понимания, на самом деле он довольно прост в использовании.Он предоставляет полезный инструмент для разработки подключаемого программного обеспечения Python.

С абстрактной точки зрения точки входа используются для создания общесистемного реестра вызовов Python, реализующих определенные интерфейсы.В pkg_resources есть API, позволяющие узнать, какие точки входа рекламируются данным пакетом, а также API, позволяющие определить, какие пакеты рекламируют определенную точку входа.

Точки входа полезны для того, чтобы позволить одному пакету использовать плагины, находящиеся в другом пакете.Например, Ян Бикинг Вставить проект широко использует точки входа.В этом случае вы можете написать пакет, который рекламирует свою фабрику приложений WSGI, используя точку входа paste.app_factory.

Другое использование точек входа — перечисление всех пакетов в системе, которые предоставляют некоторые функциональные возможности плагинов.А ТурбоГирс веб-фреймворк использует python.templating.engines точка входа для поиска установленных и доступных библиотек шаблонов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top