Skip to content

Skills 依赖管理

Skill 脚本通常需要第三方库,如何声明、安装和锁定这些依赖,是保证 Skill 可靠运行的基础。


依赖声明文件

在 Skill 的 scripts/ 目录下创建 requirements.txt(Python)或 package.json(Node.js),集中声明所有依赖。

Python 依赖:requirements.txt

bash
# 文件路径:scripts/requirements.txt
# 格式:包名==版本号(锁定版本,确保可重复安装)

pandas==2.1.4         # 数据处理
openpyxl==3.1.2       # Excel 读写
pypdf==3.17.0         # PDF 处理
python-docx==1.1.0    # Word 文档处理
requests==2.31.0      # HTTP 请求

Node.js 依赖:package.json

实例

json

{

  "name": "my-skill-scripts",

  "version": "1.0.0",

  "description": "Skill 脚本的 Node.js 依赖",

  "dependencies": {

    "xlsx": "^0.18.5",

    "puppeteer": "^21.0.0"

  }

}

在 SKILL.md 中说明安装方式

bash
## 依赖安装

首次使用前,运行以下命令安装 Python 依赖:

```bash
pip install -r scripts/requirements.txt --break-system-packages
```

若运行环境已预装依赖,可跳过此步骤。

在脚本中自动安装依赖

对于需要零配置运行的 Skill,可以在脚本开头加入依赖自检和自动安装逻辑。

实例

python

# 文件路径:scripts/auto_deps.py

import subprocess

import sys

import importlib

# 定义依赖列表:(pip安装名, import名称, 版本要求)

DEPENDENCIES = [

    ("pandas",         "pandas",    ">=2.0"),

    ("openpyxl",       "openpyxl",  ">=3.0"),

    ("python-docx",    "docx",      None),     # 无版本要求

]

def install_if_missing(pip_name: str, import_name: str) -> bool:

    """检查并按需安装依赖包"""

    try:

        importlib.import_module(import_name)

        return True   # 已安装,直接返回

    except ImportError:

        print(f"正在安装:{pip_name}...")

        result = subprocess.run(

            [sys.executable, "-m", "pip", "install", pip_name,

             "--break-system-packages", "--quiet"],

            capture_output=True, text=True

        )

        if result.returncode == 0:

            print(f"安装成功:{pip_name}")

            return True

        print(f"安装失败:{pip_name}\n{result.stderr}")

        return False

def ensure_all_deps() -> bool:

    """确保所有依赖已安装"""

    failed = []

    for pip_name, import_name, _ in DEPENDENCIES:

        if not install_if_missing(pip_name, import_name):

            failed.append(pip_name)

    if failed:

        print(f"以下依赖安装失败:{', '.join(failed)}")

        return False

    return True

if __name__ == "__main__":

    if not ensure_all_deps():

        sys.exit(1)

    # 依赖就绪后,正常执行逻辑

    import pandas as pd

    print("所有依赖已就绪,开始执行...")
bash
正在安装:python-docx...
安装成功:python-docx
所有依赖已就绪,开始执行...

版本冲突的处理策略

当 Skill 依赖的包版本与系统已有版本冲突时,有以下几种处理方式:

策略做法适用场景
宽松版本要求使用 >=而非==,允许更高版本大多数场景,兼容性好
虚拟环境在 venv 中安装,与系统隔离对版本有严格要求
使用系统已有版本不锁定版本,使用系统安装的版本依赖为常用库且版本差异影响小

创建虚拟环境(可选)

实例

bash

# 在 Skill 目录下创建虚拟环境

python3 -m venv scripts/.venv

# 激活虚拟环境

source scripts/.venv/bin/activate

# 在虚拟环境中安装依赖

pip install -r scripts/requirements.txt

# 在虚拟环境中运行脚本

python scripts/process.py

在 Claude 的执行环境中,通常不需要虚拟环境,因为每次会话都是相对隔离的。虚拟环境主要用于本地开发阶段,避免与开发机器上的其他项目产生冲突。


依赖文档规范

在 SKILL.md 或单独的 README 中,应清晰列出所有外部依赖,便于用户在安装前了解要求。

bash
## 系统要求

### 运行环境
- Python 3.8 或更高版本
- pip(Python 包管理工具)

### Python 依赖
| 包名 | 版本 | 用途 |
|------|------|------|
| pandas | >=2.0 | 数据读取与处理 |
| openpyxl | >=3.0 | Excel 文件读写 |
| python-docx | 任意 | Word 文档生成 |

### 系统工具(可选)
- pandoc:格式转换(apt-get install pandoc)

AI 思考中...

Skills 与工具链集成

Skills 版本管理与迭代

基于 VitePress 构建,部署于 GitHub Pages