用途
deploy-chalk-function 用于在 Chalk 的容器基础设施中部署独立的 Python 函数,即部署一个 Chalk 函数(chalkcompute.function)。当你需要把一段独立的 Python 逻辑放到 Chalk 平台上运行、而不是本地执行时,可以使用此技能。
主要能力
- 通过
chalkcompute包定义并部署 Chalk 函数。 - 装饰器在导入时即完成部署:构建镜像、上传、注册。
- 调用被装饰的函数会在远端执行并返回结果。
使用方式
编写一个使用 chalkcompute 包的 Python 文件(PyPI 名称为 chalkcompute,不是 chalk-sandbox-sdk),使用 uv shebang,并将 Python 固定在 <3.14,原因是传递依赖的 Rust 组件 chalk-remote-call-python 基于 PyO3 构建,目前最高支持 3.13。示例结构如下:
#!/usr/bin/env -S uv run --script
#
# /// script
# requires-python = ">=3.12,<3.14"
# dependencies = ["chalkcompute"]
# ///
import chalkcompute
@chalkcompute.function()
def some_function(arg_1: str) -> str:
return f"hi {arg_1}"
if __name__ == "__main__":
print(some_function("world"))
注意事项:
@chalkcompute.function必须被调用,写作@chalkcompute.function(),且仅接受关键字参数。写成裸装饰器@chalkcompute.function会抛出TypeError: function() takes 0 positional arguments but 1 was given。- 装饰器在导入时执行部署(构建镜像、上传、注册)。
- 调用被装饰的函数(如
some_function("world"))会远程调用并返回结果。
必需的环境变量
SDK 从环境变量读取凭据,而不是从 chalk CLI 配置读取。环境变量名是 CHALK_ENVIRONMENT_ID,不是 CHALK_ENVIRONMENT。
- CHALK_API_SERVER
- CHALK_CLIENT_ID
- CHALK_CLIENT_SECRET
- CHALK_ENVIRONMENT_ID
可以从当前项目的 chalk config 输出中读取这些值。示例调用:
CHALK_API_SERVER=... CHALK_CLIENT_ID=... CHALK_CLIENT_SECRET=... CHALK_ENVIRONMENT_ID=... ./your_script.py
若不提供 CHALK_ENVIRONMENT_ID,即便 CHALK_CLIENT_ID/CHALK_CLIENT_SECRET 有效,也会从 CustomImageService.GetOrBuildCustomImage 收到 permission_denied 错误。
本地 SDK 源
如果 chalkcompute 不在所配置的索引中(例如脚本无法从 PyPI 解析 chalkcompute),可将 uv 指向 chalk-sandbox-sdk 的本地检出:
[tool.uv.sources]
chalkcompute = { path = "/path/to/chalk-sandbox-sdk" }
适用场景
- 需要在 Chalk 容器基础设施中运行独立 Python 函数。
- 希望以声明式装饰器方式将函数部署到远端并在调用时远程执行。
限制
- Python 版本必须固定在 >=3.12,<3.14(因 PyO3 目前最高支持 3.13)。
- 装饰器写法必须是
@chalkcompute.function(),不能用裸装饰器。 - 必须通过环境变量提供凭据,尤其是
CHALK_ENVIRONMENT_ID,否则会报 permission_denied。 - 其余收费、价格、平台支持范围等信息资料中暂未提供。