4.9 KiB
4.9 KiB
@clawd/auth-runtime-py
Python 版本的 OpenClaw Auth Runtime。
注意: 本模块不加载 .env 文件,只从环境变量读取配置。
加载 .env.local 应该在具体的 skill 中实现。
项目结构
your-skill/
├── .env.local # 敏感配置(不提交到 git)
├── scripts/
│ ├── main.py # 加载 .env.local 并调用 auth_runtime
│ └── load_env.py # 从 python_auth_runtime 复制
└── pyproject.toml
安装
uv pip install /path/to/python_auth_runtime
使用方式
步骤 1: 在具体 skill 中加载 .env.local
参考 ~/clawd/skills/1688-product-master/scripts/run.ts 的 loadEnvLocal() 实现:
# your-skill/scripts/main.py
from pathlib import Path
import os
def load_env_local():
"""加载 .env.local 文件到环境变量"""
script_dir = Path(__file__).parent
env_local_path = script_dir.parent / ".env.local"
if env_local_path.exists():
with open(env_local_path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"):
continue
eq_index = line.find("=")
if eq_index > 0:
key = line[:eq_index].strip()
value = line[eq_index + 1:].strip()
# 去除引号
if (value.startswith('"') and value.endswith('"')) or \
(value.startswith("'") and value.endswith("'")):
value = value[1:-1]
# 只设置尚未存在的环境变量
if key not in os.environ:
os.environ[key] = value
# 在 main() 函数开始时调用
load_env_local()
步骤 2: 使用 auth_runtime
from python_auth_runtime import create_env_config, request_api_with_auto_refresh
# 创建配置(自动从环境变量读取)
config = create_env_config()
# 调用 API
response = request_api_with_auto_refresh(
method="POST",
url=f"{config.auth_base}/ecom/tasks/scrape",
dry_run=False,
config=config,
body={"url": "https://detail.1688.com/offer/123.html"},
)
if response.status == 200:
import json
data = json.loads(response.body)
print("商品价格:", data["price"])
完整示例
#!/usr/bin/env python3
# your-skill/scripts/main.py
import os
from pathlib import Path
from python_auth_runtime import create_env_config, request_api_with_auto_refresh
def load_env_local():
"""加载 .env.local 文件到环境变量"""
script_dir = Path(__file__).parent
env_local_path = script_dir.parent / ".env.local"
if env_local_path.exists():
with open(env_local_path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"):
continue
eq_index = line.find("=")
if eq_index > 0:
key = line[:eq_index].strip()
value = line[eq_index + 1:].strip()
if (value.startswith('"') and value.endswith('"')) or \
(value.startswith("'") and value.endswith("'")):
value = value[1:-1]
if key not in os.environ:
os.environ[key] = value
def main():
# 加载 .env.local
load_env_local()
# 创建配置
config = create_env_config()
# 调用 API
response = request_api_with_auto_refresh(
method="POST",
url=f"{config.auth_base}/ecom/tasks/scrape",
dry_run=False,
config=config,
body={"url": "https://detail.1688.com/offer/123.html"},
)
print(f"状态:{response.status}")
print(f"响应:{response.body}")
if __name__ == "__main__":
main()
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
CLIENT_KEY |
必需 | 客户端密钥 |
AUTH_BASE |
https://api-gw-test.yuanwei-lnc.com |
认证基础 URL |
AUTH_CACHE_DIR |
/tmp/skill-auth-cache |
缓存目录 |
AUTH_MIN_TTL_SEC |
60 |
最小令牌 TTL(秒) |
命令行参数覆盖
可以在命令行设置环境变量,优先级高于 .env.local:
CLIENT_KEY="override-key" python scripts/main.py
测试
cd /Users/xiaolongxia/Documents/ai-build-app/skills/excel-toolkit/python_auth_runtime
uv run python scripts/example_usage.py
与 TypeScript 版本对比
| 特性 | TypeScript | Python |
|---|---|---|
| 模块 | @clawd/auth-runtime |
python_auth_runtime |
| .env 加载 | skill 自己实现 (loadEnvLocal()) |
skill 自己实现 (load_env_local()) |
| 环境变量 | process.env |
os.getenv() |
| 缓存 | /tmp/skill-auth-cache |
/tmp/skill-auth-cache |