跳转到主要内容

用于创建和导入插件的框架

项目描述

Documentation Status GitHub Actions Status Coverage Status
PyPI Package latest release Supported versions Supported implementations
Fedora version support EPEL version support

概述

Pluginlib使创建项目的插件变得简单。

功能

  • 导入插件时进行验证

  • 插件可以通过不同的机制(模块、文件系统路径、入口点)加载

  • 支持同一插件的多个 版本(默认使用最新版本)

  • 可以按类型、名称或版本通过 黑名单 插件

  • 支持多个 插件组,以便一个程序可以使用多组不会冲突的插件

  • 插件支持 条件加载(示例:os、版本、已安装软件等)

  • 加载后,插件可以通过字典或点表示法访问

安装

PIP

$ pip install pluginlib

Fedora 和 EL (RHEL/CentOS/Rocky/Alma)

(EPEL 仓库必须为 EL8 配置)

$ dnf install python3-pluginlib

EL7 (RHEL/CentOS)

(EPEL 仓库必须 配置)

$ yum install python2-pluginlib
$ yum install python36-pluginlib

使用方法

步骤 1:定义插件父类

所有插件都是父类的子类。要创建父类,使用 @Parent 装饰器。

@Parent 装饰器可以接受一个插件类型,用于访问父类的子插件。如果没有提供插件类型,则使用类名。

@Parent 装饰器还可以接受一个 group 关键字,这限制了插件只能属于特定的插件组。如果不同项目的插件在单个程序中可以访问,例如使用库和框架,则应该指定 group。有关更多信息,请参阅 插件组 部分。

子插件需要的方法应标记为抽象方法。没有这些方法或参数不匹配的插件将无法加载。有关更多信息,请参阅 抽象方法 部分。

"""
sample.py
"""
import pluginlib

@pluginlib.Parent('parser')
class Parser(object):

    @pluginlib.abstractmethod
    def parse(self, string):
        pass

步骤 2:定义插件类

要创建插件,从父类派生并包含任何必需的方法。

插件可以通过可选的类属性进行自定义

_alias_

更改插件的名称,默认为类名。

_version_

设置插件的版本。默认为模块 __version__None。如果加载了类型和名称相同的多个插件,则使用版本最高的插件。有关更多信息,请参阅 版本 部分。

_skipload_

指定插件不应加载。当插件是其他插件的父类或插件仅在特定条件下加载时,这很有用。有关更多信息,请参阅 条件加载 部分。

"""
sample_plugins.py
"""
import json
import sample

class JSON(sample.Parser):

    _alias_ = 'json'

    def parse(self, string):
        return json.loads(string)

步骤 3:加载插件

插件在导入其所在的模块时加载。 PluginLoader 将从指定的位置加载模块,并提供对这些模块的访问。

PluginLoader 可以从几个位置加载插件。
  • 程序的标准库

  • 入口点

  • 模块列表

  • 文件系统路径列表

插件还可以通过黑名单和类型过滤器进行筛选。有关更多信息,请参阅 黑名单类型过滤器 部分。

插件通过 PluginLoader.plugins 属性访问,这是一个可以通过点表示法访问的嵌套字典。有关其他访问插件的方法,请参阅 访问插件 部分。

import pluginlib
import sample

loader = pluginlib.PluginLoader(modules=['sample_plugins'])
plugins = loader.plugins
parser = plugins.parser.json()
print(parser.parse('{"json": "test"}'))

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

pluginlib-0.9.2.tar.gz (46.7 kB 查看哈希值)

上传时间:

构建分发

pluginlib-0.9.2-py2.py3-none-any.whl (25.4 kB 查看哈希值)

上传时间: Python 2 Python 3

由以下支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面