我已经阅读了 Pylons 和 Peak 页面上关于 Egg 入口点的文档,但我仍然不太明白。有人可以向我解释一下吗?

有帮助吗?

解决方案

“入口点”通常是一个开发者或您的Python包的用户可能希望使用,虽然非可调用对象可以作为入口点,以及可以提供的功能(或其它的可调用函数状物体) (评价为正确地指出!)。

在最流行的一种切入点是“console_script”的切入点,它指向你想提供一个命令行工具来安装任何人你的包的功能。该进入你的setup.py如下:

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

我有一个包,我刚才部署所谓的“cursive.tools”,我希望它是,提供一种“草书”命令的人可以在命令行中运行,如:

$ cursive --help
usage: cursive ...

要做到这一点的方法是定义一个函数,像草书/工具/ cmd.py也许“cursive_command”功能,看起来像:

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

和等;应该认为它已经从命令行调用,分析用户已提供的参数,和...好,做任何的命令是专门做。

有关入口点使用的一个很好的例子安装 docutils的包:它将安装像半打有用的命令为Python文档转换为其他格式。

其他提示

入口点提供持久的,文件系统基于对象的名称注册和基于名称的直接对象导入机构(由 setuptools的封装中实现) 。

他们有关联的自由形式标识符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' 寄存器the_function:

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

如示例所示,入口点被分组;有相应的API查找属于一组(下面的例子)的所有入口点。

当一个包安装(即运行“蟒的setup.py安装”),上述声明由setuptools的解析。然后将其写入特殊文件解析的信息。在此之后,通过pkg_resources API (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),和检索的the_function那里定义,在呼叫到pkg_resources.load()。

假设有被同一组ID NO其它入口点的注册,然后调用the_function将是简单:

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

因此,虽然也许有点难以在第一把握,入口点机制实际上是使用很简单。它提供了用于可插拔的Python软件开发的有用工具。

从抽象的角度来看,入口点用于创建实现某些接口的 Python 可调用程序的系统范围注册表。pkg_resources 中有一些 API 可以查看给定包通告了哪些入口点,也有一些 API 可以确定哪些包通告了某个入口点。

入口点对于允许一个包使用另一包中的插件很有用。例如,伊恩·比金的 粘贴 项目广泛使用入口点。在这种情况下,您可以编写一个包,使用入口点来宣传其 WSGI 应用程序工厂 paste.app_factory.

入口点的另一个用途是枚举系统上提供某些插件功能的所有包。这 涡轮齿轮 Web 框架使用 python.templating.engines 查找已安装且可用的模板库的入口点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top