164 votes

Expliquer les points d’entrée de Python ?

<p>J’ai lu la documentation sur l’oeuf de points d’entrée dans les pylônes et sur les pages de pointe, et je ne comprends toujours pas vraiment. Quelqu'un pourrait-il expliquer à moi, ou m’indiquer à un article ou un livre qui fait ?</p>

180voto

Petri Points 896

EntryPoints fournir un persistante, de système de fichiers basé sur l'objet de l'enregistrement de nom et nom d'objet direct mécanisme d'importation (mis en œuvre par le setuptools package).

Ils associent les noms des objets Python avec la forme libre de identificateurs. Donc, tout autre code à l'aide de la même installation de Python et de connaître l'identifiant peut accéder à un objet avec le nom associé, peu importe où l'objet est défini. Les noms associés peuvent être des noms existants dans un module Python; par exemple le nom d'une classe, une fonction ou une variable. Le point d'entrée de mécanisme ne se soucie pas ce que le nom fait référence, tant que c'est importable.

Comme exemple, nous allons utiliser (le nom de) une fonction et un imaginaire module python avec un nom pleinement qualifié de " myns.mypkg.mymodule':

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

Les points d'entrée sont enregistrés par le biais d'un des points d'entrée dans la déclaration de setup.py. Pour vous inscrire the_function en vertu de point d'entrée appelé "my_ep_func':

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

Comme le montre l'exemple, les points d'entrée sont regroupés; il est correspondant de l'API pour consulter tous les points d'entrée de l'appartenance à un groupe (exemple ci-dessous).

Sur un package d'installation (ie. 'python setup.py installer"), la déclaration ci-dessus est analysée par setuptools. Puis, il écrit les informations analysées dans le fichier spécial. Après cela, le pkg_resources API (partie de setuptools) peut être utilisé pour rechercher le point d'entrée et d'accès à l'objet(s) avec le nom associé(s):

import pkg_resources

named_objects = []
for ep in pkg_resources.iter_entry_points(group='my_ep_group_id'):
   named_objects.append(ep.load())

Ici, setuptools lire le point d'entrée de l'information qui a été écrit dans des fichiers spéciaux. Il a trouvé le point d'entrée, importé le module (myns.mypkg.mymodule), et récupéré the_function qui y sont définies, lors de l'appel à pkg_resources.load().

Supposer qu'il y avait pas d'autre point d'entrée des inscriptions pour le même id de groupe, appel the_function serait alors simple:

>>> named_objects[0]()
hello from the_function

Ainsi, alors que peut-être un peu difficile à saisir au premier abord, le point d'entrée de mécanisme est en fait assez simple à utiliser. Il fournit un outil utile pour détecteurs de Python de développement de logiciels.

152voto

Brandon Rhodes Points 21188

Un "point d'entrée" est généralement une fonction (ou une autre fonction appelable-comme l'objet) qu'un développeur ou utilisateur de votre paquet Python pourriez utiliser, mais un non-objet appelable peut être fourni comme un point d'entrée (comme souligné à juste titre dans les commentaires!).

Le genre le plus populaire de point d'entrée est la "console_script" point d'entrée, qui pointe vers une fonction que vous voulez disponible comme un outil de ligne de commande pour celui qui installe votre paquet. J'ai un paquet que je viens de déployé appelé "cursive.outils", et je voulais mettre à disposition une "cursive" commande que quelqu'un puisse l'exécuter à partir de la ligne de commande, comme:

$ cursive --help
usage: cursive ...

La façon de le faire est de définir une fonction, comme peut-être un "cursive_command" fonction dans cursive/tools/cmd.py qui ressemble à ceci:

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

et ainsi de suite; elle se doit d'assumer qu'il est appelé à partir de la ligne de commande, analyser les arguments que l'utilisateur a fourni, et ... eh bien, faire ce que la commande est conçu pour faire.

Installer le docutils paquet pour un excellent exemple de point d'entrée de l'utiliser: il va installer quelque chose comme une demi-douzaine de commandes utiles pour la conversion de la documentation Python à d'autres formats.

16voto

Rick Copeland Points 5343

Du point de vue abstrait, les points d'entrée sont utilisés pour créer un système de registre de Python callables que de mettre en œuvre certaines interfaces. Il y a des Api dans pkg_resources pour voir les points d'entrée sont annoncés par un paquet donné ainsi que les Api pour déterminer les forfaits de publicité pour un certain point d'entrée.

Les points d'entrée sont utiles pour permettre à un package de faire utiliser des plug-ins qui sont dans un autre package. Par exemple, Ian Bicking de Coller projet utilise des points d'entrée de manière intensive. Dans ce cas, vous pouvez écrire un package qui publie son application WSGI usine en utilisant le point d'entrée paste.app_factory.

Une autre utilisation des points d'entrée est l'énumération de tous les paquets sur le système qui fournissent un plug-in fonctionnalité. Le TurboGears framework web utilise l' python.templating.engines point d'entrée pour chercher des gabarits bibliothèques installées et disponibles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: