插件命名指南

Stevedore 使用 setuptools 入口点来定义和加载插件。入口点是一种标准的引用 Python 模块或包内部定义的命名对象的方式。该名称可以是对任何类、函数或实例的引用,只要它在包含模块导入时创建(即,它需要是模块级别的全局变量)。

名称和命名空间

入口点使用名称命名空间中注册。

入口点名称通常被认为是用户可见的。例如,它们经常出现在启用驱动程序的配置文件中。由于是公开的,名称通常尽可能简短,同时保持描述性。例如,数据库驱动程序插件名称可能是“mysql”、“postgresql”、“sqlite”等。

另一方面,命名空间是一个实现细节,虽然它们为开发人员所知,但通常不会暴露给用户。命名空间命名语法很像 Python 的包语法 (a.b.c),但命名空间并不对应于 Python 包。使用 Python 包名称作为入口点命名空间是一种确保唯一名称的简单方法,但并非绝对必要。入口点的主要特性是它们可以在跨包中被发现。这意味着插件可以与使用它的应用程序完全分离地开发和安装,只要它们同意命名空间和 API。

每个命名空间由消耗插件的代码拥有,并用于搜索入口点。入口点名称通常由插件拥有,但它们也可以由消耗代码为命名钩子定义(参见 HookManager)。入口点的名称必须在给定的分发中是唯一的,但不必在命名空间中是唯一的。