Wyjaśnij punkty wejścia Pythona?

Przeczytałem dokumentację o punktach wejścia do jajek w pylonach i na stronach szczytu i nadal nie rozumiem. Czy ktoś mógłby mi to wyjaśnić?

Author: Jean-François Corbett, 2009-04-22

3 answers

"punkt wejścia" jest zazwyczaj funkcją (lub innym wywoływalnym obiektem podobnym do funkcji), której programista lub użytkownik pakietu Pythona może chcieć użyć, chociaż obiekt nie wywoływalny może być również dostarczony jako punkt wejścia (co poprawnie zaznaczono w komentarzach!).

Najpopularniejszym rodzajem punktu wejścia jest punkt wejścia" console_script", który wskazuje na funkcję, którą chcesz udostępnić jako narzędzie wiersza poleceń każdemu, kto zainstaluje Twój Pakiet. To idzie do twojego setup.py like:

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

Mam pakiet, który właśnie uruchomiłem o nazwie " cursive.narzędzia "i chciałem, aby udostępnił" kursywne " polecenie, które ktoś mógłby uruchomić z linii poleceń, takie jak:

$ cursive --help
usage: cursive ...

Sposobem na to jest zdefiniowanie funkcji, np. funkcji "cursive_command" w cursive/tools/cmd.py wygląda tak:

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

I tak dalej; powinien zakładać, że został wywołany z linii poleceń, analizować argumenty podane przez użytkownika i ... dobrze, zrób cokolwiek rozkaz jest przeznaczony do zrobienia.

Zainstaluj pakiet docutils jako świetny przykład użycia punktu wejścia: zainstaluje coś w rodzaju pół tuzina użytecznych poleceń do konwersji dokumentacji Pythona do innych formatów.

 130
Author: Brandon Rhodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-11 21:30:39

EntryPoints zapewniają trwałą, opartą na systemie plików rejestrację nazwy obiektu oraz mechanizm bezpośredniego importu obiektu (zaimplementowany przez pakiet setuptools ).

Kojarzą nazwy obiektów Pythona z wolnymi identyfikatorami. Tak więc każdy inny kod korzystający z tej samej instalacji Pythona i znający identyfikator może uzyskać dostęp do obiektu o powiązanej nazwie, bez względu na to, gdzie obiekt jest zdefiniowany. nazwy powiązane mogą być dowolnymi nazwami istniejącymi 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, użyjmy (nazwy) funkcji i wyimaginowanego modułu Pythona 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 za pomocą deklaracji punktów wejścia w setup.py. to register the_function under entrypoint called 'my_ep_func':

    entry_points = {
        'my_ep_group_id': [
            'my_ep_func = myns.mypkg.mymodule:the_function'
        ]
    },

Jako przykład pokazuje, punkty wejścia są pogrupowane; istnieje odpowiednie API, które wyszukuje wszystkie punkty wejścia należące do grupy (przykład poniżej).

Po instalacji pakietu (tj. running "python setup.py install'), powyższa deklaracja jest przetwarzana przez setuptools. Następnie zapisuje przetwarzane informacje w specjalnym pliku. Następnie API pkg_resources (część setuptools) może być użyte do wyszukania punktu wejścia i uzyskania dostępu do 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, które zostały zapisane w specjalnych plikach. Znalazł punkt wejścia, zaimportował moduł (myns.mypkg.mymodule) i pobrał zdefiniowaną tam funkcję, po wywołaniu pkg_resources.load().

Zakładając, że nie było innych rejestracji punktu wejścia dla tego samego identyfikatora grupy, wywołanie funkcji byłoby proste:

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

W związku z tym, choć być może jest to trochę trudne do uchwycenia na początku, mechanizm punktu wejścia jest w rzeczywistości dość prosty w użyciu. Informatyka zapewnia przydatne narzędzie do tworzenia oprogramowania Python pluggable.

 162
Author: Petri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 06:47:26

Z abstrakcyjnego punktu widzenia, punkty wejścia są używane do tworzenia systemowego rejestru wywołań Pythona, które implementują określone interfejsy. W pkg_resources znajdują się API, które sprawdzają, które punkty wejścia są reklamowane przez dany pakiet, a także API, które określają, które pakiety reklamują dany punkt wejścia.

Punkty wejściowe są przydatne do umożliwienia jednemu pakietowi korzystania z wtyczek znajdujących się w innym pakiecie. Na przykład projekt Iana Bickinga Wklej wykorzystuje punkty wejścia / align = "left" / W takim przypadku można napisać pakiet, który reklamuje swoją fabrykę aplikacji WSGI używając punktu wejścia paste.app_factory.

Innym zastosowaniem dla punktów wejścia jest wyliczanie wszystkich pakietów w systemie, które zapewniają pewną funkcjonalność wtyczek. TurboGears web framework wykorzystuje python.templating.engines punkt wejścia do wyszukiwania bibliotek szablonów, które są zainstalowane i dostępne.

 16
Author: Rick Copeland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-21 22:10:16