插件系统
byk 通过隔离的 Python 虚拟环境运行插件,不污染系统全局的 pip 包。插件基于 Python 模块或脚本执行,安装后即可作为一级命令使用。
工作原理
插件系统依赖 ~/.byk/venv/ 下的 Python 虚拟环境。当你运行 byk add <user/repo[/key]> 时:
- 从远程仓库(或本地文件)拉取插件协议
byk.json - 查找匹配的插件 key,按固定顺序执行操作块:
pip-keep→pip→downloads→download-to-workdir→download-to-alias→command/commands→alias - 在隔离的 venv 中执行
pip install(pip-keep/pip块)、统一下载/解压资源(downloads/download-to-workdir/download-to-alias块) - 将命令路由直接合并到
~/.byk/plugins/plugins.cmd.json,包追踪信息持久化到~/.byk/plugins/plugins.pkg.json
之后运行 byk <command> 时,byk 根据 type 字段区分执行方式:
python-m:执行python -m <entry>python:执行python plugins/<plugin_key>/<entry>pip-bin:直接执行venv/bin/<entry>bin:直接执行plugins/<plugin_key>/<entry>(支持相对路径如my-tool/bin/my-tool)
初始化
首次使用插件功能时,venv 不存在则 byk 会自动创建,也可以手动初始化:
安装插件
从远程仓库安装
任何 GitHub 仓库只需在根目录放一个 byk.json 即可作为 byk 插件源:
指定分支
使用 @ 语法指定分支、tag 或 commit,与 jsDelivr 一致:
CDN 加速
使用 --cdn 选项将 raw.githubusercontent.com 的 URL 自动转换为 jsDelivr CDN,加速下载:
本地安装
运行插件
安装完成后,插件命令自动注册为 byk 的一级命令,直接使用即可:
所有命令行参数会原样透传给底层的 Python 模块。
示例
查看已安装插件
卸载插件
卸载流程:删除下载的脚本文件,清除 plugins.cmd.json 和 plugins.pkg.json 中该插件注册的所有命令。
Note
卸载插件时不会卸载 pip 包,因为一个 pip 包可能被多个插件共享。留在 venv 中不影响其他插件。
目录结构
插件相关的数据存储在以下位置:
~/.byk
venv# Python 虚拟环境(python3 -m venv 创建)
bin# Python 解释器和 pip
lib
plugins
plugins.cmd.json# 命令路由(热路径:命令解析、帮助渲染)
plugins.pkg.json# 包追踪(冷路径:卸载、信息查询)
<plugin-key># 每个插件的下载资源存放在独立子目录
<plugin-key># 解压后的二进制/脚本文件按 plugin key 隔离
状态文件
插件系统使用两个 JSON 文件分别管理命令路由和包追踪,由 byk add / byk remove 自动维护。
plugins.cmd.json(命令路由)
热路径文件,用于命令解析、路由和帮助渲染:
plugins.pkg.json(包追踪)
冷路径文件,记录每个插件的安装来源和注册命令,用于卸载和信息查询:
编写自己的插件
如果你希望将自己的工具发布为 byk 插件,请参考 插件协议 byk.json。