Відповіді:
"Точка входу", як правило, є функцією (або іншим об'єктом, схожим на функцію дзвінка), який розробник або користувач вашого пакету Python може захотіти використовувати, хоча об'єкт, що не викликається, може бути також наданий як точка входу (як правильно вказано в коментарях!).
Найпопулярнішим видом точки входу є точка входу console_scripts , яка вказує на функцію, яку ви хочете зробити доступною як інструмент командного рядка для всіх, хто встановлює ваш пакет. Це входить у ваш setup.py, наприклад:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
У мене є пакет, який я щойно розгорнув під назвою "cursive.tools", і я хотів, щоб він мав доступною "скоромовною" командою, яку хтось може запускати з командного рядка, наприклад:
$ cursive --help
usage: cursive ...
Спосіб зробити це - визначити функцію, як, можливо, функцію "cursive_command" у скорописі / tools / cmd.py, що виглядає так:
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
і так далі; слід припустити, що він викликається з командного рядка, проаналізує аргументи, які надав користувач, і ... ну, роби все, що команда призначена.
Встановіть пакет docutils для чудового прикладу використання точки вступу: він встановить щось на зразок півдесятка корисних команд для перетворення документації Python в інші формати.
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. Потім він записує проаналізовану інформацію в спеціальний файл. Після цього API pkg_resources (частина 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.
EntryPoints
Посилання несвіжа, хоча пояснення дуже ясно.
З абстрактної точки зору, точки входу використовуються для створення загальносистемного реєстру викликів Python, які реалізують певні інтерфейси. Є API в pkg_resources, щоб побачити, які точки входу рекламується певним пакетом, а також API, щоб визначити, які пакети рекламують певну точку входу.
Пункти введення корисні для дозволу одного пакету використовувати плагіни, які є в іншому. Наприклад, проект Ist Bicking Paste широко використовує вхідні точки. У цьому випадку ви можете написати пакет, який рекламує свою фабрику додатків WSGI, використовуючи точку входуpaste.app_factory
.
Інше використання для точок входу - це перерахування всіх пакетів у системі, які надають деяку функціональність плагінів. TurboGears веб - фреймворк використовує python.templating.engines
точку входу для пошуку шаблонних бібліотек, які встановлені і доступні.
setup.py
зовсім не містятьentry_points
.