跳转至

插件(Plugins)


Hatch 使用 pluggy 来实现插件功能。

概览(Overview)

所有插件都通过注册钩子(registration hooks)提供一个或多个继承自特定 类型接口 的类。

每个注册钩子都必须由 Hatch 的钩子标记装饰。例如,如果你想创建一种新的环境类型,可以这样写:

from hatchling.plugin import hookimpl

from .plugin import SpecialEnvironment


@hookimpl
def hatch_register_environment():
    return SpecialEnvironment

钩子函数可以返回单个类,也可以返回类的列表。

每个类都必须定义一个名为 PLUGIN_NAME 的属性,用户在选择插件时将使用该名称。因此在上例中,该类可能定义如下:

...
class SpecialEnvironment(...):
    PLUGIN_NAME = 'special'
    ...

项目配置(Project configuration)

命名规范(Naming)

建议插件项目名称以 hatch- 为前缀。例如,若你为名为 foo 的产品编写插件,可定义为:

[project]
name = "hatch-foo"

插件发现(Discovery)

你需要将项目定义为 Hatch 的一个 Python 插件

[project.entry-points.hatch]
foo = "pkg.hooks"

插件名称应为项目名称去掉 hatch- 前缀后的部分,而路径应指向包含注册钩子的模块。

分类器(Classifier)

Framework :: Hatch 添加到项目的 分类器 中,以便用户更容易搜索到 Hatch 插件:

[project]
classifiers = [
  ...
  "Framework :: Hatch",
  ...
]

插件类型(Types)

Hatchling 插件

这些插件用于构建项目,因此定义的依赖项会自动安装在每个构建环境中:

Hatch 插件

这些插件必须安装在与 Hatch 本身相同的环境中: