插件#
为了启用与 Conda 兼容且可发现的自定义功能和额外功能(但并不一定作为 Conda 代码库的默认部分提供),从版本 22.11.0
开始实施了官方的 Conda 插件机制。
实施#
Conda 中的插件通过利用 Pluggy Python 框架集成了“钩子 + 入口点”结构。这种实现可以通过以下两个步骤分解
定义要注册的钩子
在 Conda 入口点命名空间下注册插件
钩子#
以下是一个非常基本的插件“钩子”的示例
import conda.plugins
@conda.plugins.hookimpl
def conda_subcommands(): ...
使用 pyproject.toml 文件打包#
以下示例使用 pyproject.toml
文件配置 setuptools
(请注意,如果定义了 pyproject.toml
文件,则 setup.py
文件是可选的,因此此处不会讨论)
[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 生态系统中其他利益相关者贡献的门槛
……等等!