Przeczytałem dokumentację dotyczącą punktów wejścia do jaj w Pylons i na stronach Peak i nadal nie rozumiem. Czy ktoś mógłby mi je wyjaśnić?
Przeczytałem dokumentację dotyczącą punktów wejścia do jaj w Pylons i na stronach Peak i nadal nie rozumiem. Czy ktoś mógłby mi je wyjaśnić?
Odpowiedzi:
„Punkt wejścia” to zazwyczaj funkcja (lub inny wywoływalny obiekt podobny do funkcji), z którego deweloper lub użytkownik pakietu Python może chcieć skorzystać, chociaż obiekt niewymagalny może być również dostarczony jako punkt wejścia (równie poprawnie wskazane w komentarzach!).
Najpopularniejszym rodzajem punktu wejścia jest punkt wejścia console_scripts , który wskazuje na funkcję, którą chcesz udostępnić jako narzędzie wiersza polecenia każdemu, kto zainstaluje twój pakiet. Dotyczy to pliku setup.py, takiego jak:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
Mam właśnie wdrożony pakiet o nazwie „cursive.tools” i chciałem, aby udostępnił polecenie „cursive”, które ktoś mógłby uruchomić z wiersza poleceń, na przykład:
$ cursive --help
usage: cursive ...
Sposobem na to jest zdefiniowanie funkcji, na przykład funkcji „cursive_command” w cursive / tools / cmd.py, która wygląda następująco:
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
i tak dalej; powinien założyć, że został wywołany z wiersza poleceń, przeanalizować argumenty dostarczone przez użytkownika i ... cóż, zrobić wszystko, co polecenie ma wykonać.
Zainstaluj pakiet docutils jako doskonały przykład użycia punktu wejścia: zainstaluje coś w rodzaju kilku użytecznych poleceń do konwersji dokumentacji Pythona na inne formaty.
EntryPoints zapewniają trwałą, opartą na systemie plików rejestrację nazw obiektów i mechanizm bezpośredniego importu obiektów oparty na nazwie (implementowany przez pakiet setuptools ).
Kojarzą nazwy obiektów Python z dowolnymi identyfikatorami. Tak więc każdy inny kod używający tej samej instalacji w Pythonie i znający identyfikator może uzyskać dostęp do obiektu o powiązanej nazwie, bez względu na to, gdzie obiekt jest zdefiniowany. Te powiązane nazwy mogą być dowolne nazwy istniejących w moduł Pythona ; na przykład nazwa klasy, funkcji lub zmiennej. Mechanizm punktu wejścia nie dba o to, do czego odnosi się nazwa, o ile można ją importować.
Jako przykład zastosujmy (nazwa) funkcji i urojonego modułu python o w pełni kwalifikowanej nazwie „myns.mypkg.mymodule”:
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
Punkty wejścia są rejestrowane poprzez deklarację punktów wejścia w setup.py. Aby zarejestrować funkcję w punkcie wejścia o nazwie „my_ep_func”:
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
Jak pokazuje przykład, punkty wejścia są pogrupowane; istnieje odpowiedni interfejs API do wyszukiwania wszystkich punktów wejścia należących do grupy (przykład poniżej).
Po instalacji pakietu (tj. Po uruchomieniu „python setup.py install”) powyższa deklaracja jest analizowana przez setuptools. Następnie zapisuje przeanalizowane informacje w specjalnym pliku. Następnie można użyć interfejsu API pkg_resources (część setuptools), aby wyszukać punkt wejścia i uzyskać dostęp do obiektu (obiektów) o powiązanych nazwach:
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()})
Tutaj setuptools odczytuje informacje o punkcie wejścia zapisane w specjalnych plikach. Znalazł punkt wejścia, zaimportował moduł (myns.mypkg.mymodule) i odzyskał zdefiniowaną tam funkcję, po wywołaniu pkg_resources.load ().
Zakładając, że nie ma innych rejestracji punktu wejścia dla tego samego identyfikatora grupy, wywołanie funkcji_ byłoby wtedy proste:
>>> named_objects['my_ep_func']()
hello from the_function
Zatem, choć początkowo może być nieco trudny do uchwycenia, mechanizm punktu wejścia jest w rzeczywistości dość prosty w użyciu. Zapewnia przydatne narzędzie do programowania oprogramowania Python z możliwością podłączenia.
EntryPoints
Link jest przestarzały, choć wyjaśnienie jest bardzo jasne.
Z abstrakcyjnego punktu widzenia punkty wejścia są używane do utworzenia ogólnosystemowego rejestru kallab Pythona, które implementują określone interfejsy. W pkg_resources znajdują się interfejsy API, które pokazują, które punkty wejścia są reklamowane przez dany pakiet, a także interfejsy API, które określają, które pakiety reklamują określony punkt wejścia.
Punkty wejścia są przydatne do umożliwienia jednemu pakietowi korzystania z wtyczek znajdujących się w innym pakiecie. Na przykład projekt wklejania Iana Bickinga intensywnie wykorzystuje punkty wejścia. W takim przypadku możesz napisać pakiet reklamujący fabrykę aplikacji WSGI przy użyciu punktu wejścia paste.app_factory
.
Innym zastosowaniem punktów wejścia jest wyliczenie wszystkich pakietów w systemie, które zapewniają pewne funkcje wtyczek. TurboGears ramy internetowa wykorzystuje python.templating.engines
punkt wejścia zajrzeć do biblioteki szablonów, które są zainstalowane i dostępne.
setup.py
nie zawierająentry_points
wcale.