不能直接写绝对路径。

SKILL.mdmetadata.openclaw.requires.bins 字段中,OpenClaw 期望的是可执行文件的名称(即命令),而不是文件路径。

这个字段的作用是让 OpenClaw 在加载技能时检查系统环境中是否安装了某个工具(类似于在终端输入 python3 --version)。如果你填入绝对路径(如 /usr/bin/python3),OpenClaw 可能会将其识别为一个名为 /usr/bin/python3 的奇怪命令,从而导致依赖检查失败,技能无法加载。

💡 正确的解决方案

如果你使用的是非标准路径的 Python(例如虚拟环境 venvconda 中的 Python),请按照以下方式处理:

1. 推荐做法:使用别名或软链接

确保你的 Python 环境已经被添加到系统的 PATH 环境变量中,或者你可以给它起一个别名。

  • 场景:你的 Python 在虚拟环境中,路径是 /home/user/myproject/venv/bin/python
  • 做法

    1. SKILL.md 中依然写通用名称,例如 bins: ["my-special-python"]
    2. 在你的系统 shell 配置文件(如 .bashrc.zshrc)中添加别名:

      alias my-special-python='/home/user/myproject/venv/bin/python'
    3. 重启终端使别名生效。这样 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)而不是硬编码绝对路径。