不能直接写绝对路径。
在 SKILL.md 的 metadata.openclaw.requires.bins 字段中,OpenClaw 期望的是可执行文件的名称(即命令),而不是文件路径。
这个字段的作用是让 OpenClaw 在加载技能时检查系统环境中是否安装了某个工具(类似于在终端输入 python3 --version)。如果你填入绝对路径(如 /usr/bin/python3),OpenClaw 可能会将其识别为一个名为 /usr/bin/python3 的奇怪命令,从而导致依赖检查失败,技能无法加载。
💡 正确的解决方案
如果你使用的是非标准路径的 Python(例如虚拟环境 venv 或 conda 中的 Python),请按照以下方式处理:
1. 推荐做法:使用别名或软链接
确保你的 Python 环境已经被添加到系统的 PATH 环境变量中,或者你可以给它起一个别名。
- 场景:你的 Python 在虚拟环境中,路径是
/home/user/myproject/venv/bin/python。 做法:
- 在
SKILL.md中依然写通用名称,例如bins: ["my-special-python"]。 在你的系统 shell 配置文件(如
.bashrc或.zshrc)中添加别名:alias my-special-python='/home/user/myproject/venv/bin/python'- 重启终端使别名生效。这样 OpenClaw 就能检测到
my-special-python这个命令了。
- 在
2. 在脚本内部指定解释器 (Shebang)
其实,bins 字段主要用于前置检查(防止技能加载时报错)。真正决定脚本由哪个 Python 运行的,是脚本文件第一行的 Shebang。
做法:在你的
main.py文件第一行直接写上绝对路径:#!/home/user/myproject/venv/bin/python # -*- coding: utf-8 -*- def my_tool(): # ...- 配合:然后在
SKILL.md中,bins可以写一个简单的检查项(如python3),或者如果脚本本身有执行权限(chmod +x main.py),OpenClaw 会直接尝试运行脚本,此时 Shebang 会生效。
📌 总结
| 配置项 | 能否写绝对路径 | 说明 |
|---|---|---|
bins | 不能 | 只能写命令名(如 python3, node, ffmpeg)。它用于检查环境是否存在。 |
| 脚本内部 | 能 | 在 .py 文件第一行写 #!/绝对路径/python,指定运行解释器。 |
| 脚本调用 | 能 | 如果你在 Skill 的逻辑中通过 shell 命令调用脚本,可以在命令里写绝对路径。 |
建议: 为了保持技能的可移植性(比如以后发给同事或在另一台电脑运行),尽量依赖环境配置(PATH)而不是硬编码绝对路径。
评论已关闭