Python-Einstiegspunkte erklären?

Ich habe die Dokumentation über Eiereintrittspunkte in Pylonen und auf den Peak-Seiten gelesen und ich verstehe immer noch nicht. Könnte mir jemand mir erklären, oder zeige mich auf einen Artikel oder ein Buch, das das tut?

3 Solutions collect form web for “Python-Einstiegspunkte erklären?”

Ein "Einstiegspunkt" ist in der Regel eine Funktion (oder ein anderes aufrufbares funktionsähnliches Objekt), die ein Entwickler oder Benutzer Ihres Python-Pakets verwenden möchte, obwohl ein nicht kündbares Objekt auch als Einstiegspunkt geliefert werden kann (wie es richtig ist Wies in den kommentaren auf!).

Der beliebteste Einstiegspunkt ist der Einstiegspunkt "console_script", der auf eine Funktion verweist, die als Kommandozeilen-Tool für jeden, der Ihr Paket installiert, zur Verfügung gestellt wird. Das geht in dein setup.py wie:

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

Ich habe ein Paket, das ich gerade als "cursive.tools" bezeichnet habe, und ich wollte, dass es einen "kursiven" Befehl zur Verfügung stellt, den jemand von der Kommandozeile ausführen könnte:

 $ cursive --help usage: cursive ... 

Der Weg, dies zu tun ist definieren eine Funktion, wie vielleicht eine "cursive_command" -Funktion in cursive / tools / cmd.py, die wie folgt aussieht:

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

und so weiter; Es sollte davon ausgehen, dass es von der Kommandozeile aufgerufen wurde, analysieren die Argumente, die der Benutzer bereitgestellt hat, und … gut, was auch immer der Befehl entworfen ist, um zu tun.

Installiere das Docutils- Paket für ein großartiges Beispiel für den Einstiegspunkt: Es wird so etwas wie ein halbes Dutzend nützliche Befehle zum Konvertieren von Python-Dokumentation in andere Formate installieren.

EntryPoints bieten eine persistente, dateisystembasierte Objektnamenregistrierung und namenbasierten direkten Objektimportmechanismus (implementiert durch das setuptools- Paket).

Sie verknüpfen Namen von Python-Objekten mit Freiform-Bezeichnern. So kann jeder andere Code, der dieselbe Python-Installation verwendet und den Identifikator kennt, auf ein Objekt mit dem zugehörigen Namen zugreifen können, egal wo das Objekt definiert ist. Die zugehörigen Namen können beliebige Namen sein, die in einem Python-Modul vorhanden sind . ZB Name einer Klasse, Funktion oder Variable. Der Einstiegspunkt Mechanismus kümmert sich nicht, was der Name bezieht, solange es importierbar ist.

Als Beispiel verwenden wir den Namen einer Funktion und ein imaginäres Pythonmodul mit einem vollqualifizierten Namen 'myns.mypkg.mymodule':

 def the_function(): "function whose name is 'the_function', in 'mymodule' module" print "hello from the_function" 

Einstiegspunkte werden über eine Einstiegspunktdeklaration in setup.py registriert. Um die_Funktion unter dem Einstiegspunkt 'my_ep_func' zu registrieren:

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

Wie das Beispiel zeigt, sind Einstiegspunkte gruppiert; Es gibt entsprechende API, um alle Einstiegspunkte einer Gruppe zu sehen (Beispiel unten).

Bei einer Paketinstallation (dh laufend 'python setup.py install') wird die obige Deklaration von setuptools analysiert. Dann schreibt er die analysierten Informationen in eine spezielle Datei. Danach kann die pkg_resources API (Teil von setuptools) verwendet werden, um den Einstiegspunkt nachzuschlagen und auf das Objekt mit den zugehörigen Namen zuzugreifen:

 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()}) 

Hier lesen setuptools die Einstiegspunktinformationen, die in Sonderdateien geschrieben wurden. Es fand den Einstiegspunkt, importierte das Modul (myns.mypkg.mymodule) und holte die dort definierte Funktion bei Aufruf von pkg_resources.load () ab.

Angenommen, es gab keine anderen Einstieg Registrierungen für die gleiche Gruppe ID, rufen die Funktion wäre dann einfach:

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

So, während vielleicht ein bisschen schwierig, zuerst zu begreifen, ist der Einstiegspunkt Mechanismus eigentlich ganz einfach zu bedienen. Es bietet ein nützliches Werkzeug für steckbare Python-Software-Entwicklung.

Aus abstrakter Sicht werden Einstiegspunkte verwendet, um eine systemweite Registrierung von Python-Callables zu erstellen, die bestimmte Schnittstellen implementiert. Es gibt APIs in pkg_resources zu sehen, welche Einstiegspunkte von einem gegebenen Paket sowie APIs beworben werden, um festzustellen, welche Pakete einen bestimmten Einstiegspunkt ankündigen.

Einstiegspunkte sind nützlich, um zuzulassen, dass ein Paket Plugins verwendet, die sich in einem anderen Paket befinden. Zum Beispiel, Ian Bicking's Paste- Projekt verwendet Einstiegspunkte ausgiebig. In diesem Fall können Sie ein Paket schreiben, das seine WSGI-Applikationsfabrik mit dem Einstiegspunkt paste.app_factory .

Eine weitere Verwendung für Einstiegspunkte ist die Aufzählung aller Pakete auf dem System, die einige Plugin-Funktionalität bieten. Das TurboGears- Web-Framework verwendet den python.templating.engines Einstiegspunkt, um Template-Bibliotheken python.templating.engines , die installiert und verfügbar sind.

  • Ausschluss von Quelldateien aus aufgebauter rpm-Verteilung mit setuptool
  • So deaktivieren Sie das Hochladen eines Pakets auf PyPi, es sei denn - public wird an den Upload-Befehl übergeben
  • Installieren von Django und verwandten Paketen auf einem Offline-Computer
  • Verpackungsressourcen mit setuptools / verteilen
  • Kann ich setuptools ohne berechtigungen zu / usr / local etc benutzen
  • Ein einfaches Hallo World Setuptools Paket und installieren es mit Pip
  • Eier im Pfad vor PYTHONPATH Umgebungsvariable
  • Warum kann ich Python 2.7 unter Centos 5.5 nicht installieren?
  • Warum funktioniert setup_requires nicht richtig für numpy?
  • Force setuptools zur Verwendung von dependency_links zur Installation von mysqlclient
  • Füge Python-Argumente in der Shebang-Zeile des Skripts hinzu (Skript mit Buildout und zc.recipe.egg: scripts)
  • Python ist die beste Programmiersprache der Welt.