Я прочитал документацию о точках входа яиц в Pylons и на страницах Peak, и до сих пор не совсем понимаю. Может ли кто-нибудь объяснить мне их?
источник
Я прочитал документацию о точках входа яиц в Pylons и на страницах Peak, и до сих пор не совсем понимаю. Может ли кто-нибудь объяснить мне их?
«Точка входа» - это, как правило, функция (или другой вызываемый функциональный объект), который может захотеть использовать разработчик или пользователь вашего пакета Python, хотя в качестве точки входа может быть также предоставлен не вызываемый объект (как правильно). указал в комментариях!).
Наиболее популярный тип точки входа - точка входа console_scripts , которая указывает на функцию, которую вы хотите сделать доступной в качестве инструмента командной строки для любого, кто устанавливает ваш пакет. Это идет в ваш setup.py как:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
У меня есть только что развернутый пакет, который называется cursive.tools, и я хотел, чтобы он сделал доступной команду cursive, которую кто-то может запустить из командной строки, например:
$ 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 в другие форматы.
setup.py
не содержатentry_points
вообще.EntryPoints обеспечивают постоянную регистрацию имен объектов на основе файловой системы и механизм прямого импорта объектов на основе имен (реализуется пакетом setuptools ).
Они связывают имена объектов Python с идентификаторами свободной формы. Таким образом, любой другой код, использующий ту же установку Python и знающий идентификатор, может получить доступ к объекту со связанным именем, независимо от того, где объект определен. Эти связанные имена могут быть любыми именами существующих в модуле Python ; например, имя класса, функции или переменной. Механизм точки входа не заботится о том, к чему относится имя, пока оно импортируется.
В качестве примера, давайте использовать (имя) функцию и воображаемый модуль Python с полностью определенным именем «myns.mypkg.mymodule»:
Точки входа регистрируются через объявление точек входа в setup.py. Чтобы зарегистрировать функцию в точке входа под названием my_ep_func:
Как показывает пример, точки входа сгруппированы; есть соответствующий API для поиска всех точек входа, принадлежащих группе (пример ниже).
После установки пакета (т. Е. Запуска «python setup.py install») вышеуказанное объявление анализируется программой setuptools. Затем он записывает разобранную информацию в специальный файл. После этого API pkg_resources (часть setuptools) можно использовать для поиска точки входа и доступа к объекту (ам) с соответствующими именами:
Здесь setuptools считывает информацию о точке входа, которая была записана в специальных файлах. Она нашла точку входа, импортировала модуль (myns.mypkg.mymodule) и извлекла определенную там функцию после вызова pkg_resources.load ().
Предполагая, что не было других регистраций точек входа для того же идентификатора группы, вызов функции _ был бы простым:
Таким образом, хотя поначалу это немного сложно понять, механизм точки входа на самом деле довольно прост в использовании. Он предоставляет полезный инструмент для разработки подключаемого программного обеспечения Python.
источник
EntryPoints
Ссылка несвежая, хотя объяснение очень ясно.С абстрактной точки зрения точки входа используются для создания общесистемного реестра вызовов Python, которые реализуют определенные интерфейсы. В pkg_resources есть API для просмотра того, какие точки входа объявляются данным пакетом, а также API для определения того, какие пакеты рекламируют определенную точку входа.
Точки входа полезны для того, чтобы один пакет мог использовать плагины из другого пакета. Например, в проекте Paste Яна Бикинга широко используются точки входа. В этом случае вы можете написать пакет, который рекламирует свою фабрику приложений WSGI, используя точку входа
paste.app_factory
.Другое использование точек входа - перечисление всех пакетов в системе, которые предоставляют некоторые функциональные возможности плагинов. TurboGears веб - фреймворк использует
python.templating.engines
точку входа для поиска шаблонных библиотек, которые установлены и доступны.источник