插件#
为了启用自定义和与 conda 兼容且可被 conda 发现的额外功能(但不一定作为 conda 代码库的默认部分发布),自 22.11.0
版本起,已实施官方 conda 插件机制。
实施#
conda 中的插件通过利用 Pluggy Python 框架,集成了“钩子 + 入口点”结构。 此实现可以分解为以下两个步骤
定义要注册的钩子
在 conda 入口点命名空间下注册插件
钩子#
以下是一个非常基本的插件“钩子”示例
my_plugin.py#
import conda.plugins
@conda.plugins.hookimpl
def conda_subcommands(): ...
使用 pyproject.toml 文件进行打包#
以下是使用 pyproject.toml
文件配置 setuptools
的示例(请注意,如果定义了 pyproject.toml
文件,则 setup.py
文件是可选的,因此在此处不作讨论)
pyproject.toml#
[build-system]
requires = ["setuptools", "setuptools-scm"]
build-backend = "setuptools.build_meta"
[project]
name = "my-conda-plugin"
version = "1.0.0"
description = "My conda plugin"
requires-python = ">=3.7"
dependencies = ["conda"]
[project.entry-points."conda"]
my-conda-plugin = "my_plugin"
Conda 插件用例#
新的 conda 插件 API 生态系统带来了许多可能性,包括但不限于
Conda 插件的优势#
conda 插件生态系统使整个 conda 社区的贡献者能够开发和共享新功能,从而带来更多功能并专注于用户体验。 虽然以下列表绝非详尽无遗,但 conda 插件的一些优势包括
支持在 conda 社区中更好地分配维护工作
使第三方贡献者能够使用官方 API,而不是不得不转向变通方法和包装器
通过官方 API 扩展 conda 内部组件的能力
降低 conda 生态系统中其他利益相关者贡献的门槛
... 以及更多!